Merged with default branch to prepare a new release. maintenance

Sun, 01 Dec 2019 16:38:47 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 01 Dec 2019 16:38:47 +0100
branch
maintenance
changeset 7345
bc0ee7fadd03
parent 7323
83df7d69e61b (current diff)
parent 7344
83bb25074625 (diff)
child 7349
253e2c326448

Merged with default branch to prepare a new release.

docs/changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Editor.py file | annotate | diff | comparison | revisions
eric6/UI/UserInterface.py file | annotate | diff | comparison | revisions
eric6/ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
eric6/i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_en.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_it.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
scripts/install.py file | annotate | diff | comparison | revisions
--- a/docs/changelog	Fri Nov 01 16:11:55 2019 +0100
+++ b/docs/changelog	Sun Dec 01 16:38:47 2019 +0100
@@ -1,5 +1,18 @@
 Change Log
 ----------
+Version 19.12:
+- bug fixes
+- MicroPython
+  -- added a menu entry to show the local and device time side-by-side
+  -- added a PyBoard menu entry to flash a new firmware
+  -- added a menu entry to open the firmware download page of a device
+- Syntax Checker
+  -- added a syntax checker for JSON files
+  -- added a syntax checker for YAML files
+- install script
+  -- added the "--yes" flag to allow installation of all missing prerequisites
+     with pip without asking
+
 Version 19.11:
 - bug fixes
 - Editor
@@ -7,9 +20,9 @@
   -- added a context menu to select spell check language
   -- made the preview refresh timeout configurable
      (see Editor -> File Handling config page)
-- Error Message Dialog:
-  - added a configurable minimum severity for messages being shown in a dialog
-    (see Application config page)
+- Error Message Dialog
+  -- added a configurable minimum severity for messages being shown in a dialog
+     (see Application config page)
 - MicroPython
   -- added support for PyBoard
 - Previewers
--- a/eric6.e4p	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6.e4p	Sun Dec 01 16:38:47 2019 +0100
@@ -319,10 +319,12 @@
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/__init__.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py</Source>
+    <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/jsonCheckSyntax.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/__init__.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py</Source>
+    <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/yamlCheckSyntax.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/Tabnanny/__init__.py</Source>
--- a/eric6/APIs/Python3/eric6.api	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/APIs/Python3/eric6.api	Sun Dec 01 16:38:47 2019 +0100
@@ -766,6 +766,7 @@
 eric6.Debugger.VariablesViewer.VariableItem.nonExpandableTypes?7
 eric6.Debugger.VariablesViewer.VariableItem.populated?4()
 eric6.Debugger.VariablesViewer.VariableItem.rx_nonprintable?7
+eric6.Debugger.VariablesViewer.VariableItem.unsized?7
 eric6.Debugger.VariablesViewer.VariableItem?1(parent, dvar, dtype, dvalue)
 eric6.Debugger.VariablesViewer.VariablesModel.clear?4(reset=False)
 eric6.Debugger.VariablesViewer.VariablesModel.columnCount?4(parent=QModelIndex())
@@ -2225,6 +2226,7 @@
 eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.deviceName?4()
 eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.forceInterrupt?4()
 eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.getDocumentationUrl?4()
+eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.getFirmwareUrl?4()
 eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.getWorkspace?4(silent=False)
 eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.runScript?4(script)
 eric6.MicroPython.CircuitPythonDevices.CircuitPythonDevice.setButtons?4()
@@ -2244,6 +2246,7 @@
 eric6.MicroPython.EspDevices.EspDevice.deviceName?4()
 eric6.MicroPython.EspDevices.EspDevice.forceInterrupt?4()
 eric6.MicroPython.EspDevices.EspDevice.getDocumentationUrl?4()
+eric6.MicroPython.EspDevices.EspDevice.getFirmwareUrl?4()
 eric6.MicroPython.EspDevices.EspDevice.runScript?4(script)
 eric6.MicroPython.EspDevices.EspDevice.setButtons?4()
 eric6.MicroPython.EspDevices.EspDevice?1(microPythonWidget, parent=None)
@@ -2285,9 +2288,11 @@
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.deviceName?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.forceInterrupt?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.getDocumentationUrl?4()
+eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.getFirmwareUrl?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.getWorkspace?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.handleDataFlood?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.hasDocumentationUrl?4()
+eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.hasFirmwareUrl?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.hasTimeCommands?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.runScript?4(script)
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.sendCommands?4(commandsList)
@@ -2395,6 +2400,7 @@
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.deviceName?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.forceInterrupt?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.getDocumentationUrl?4()
+eric6.MicroPython.MicrobitDevices.MicrobitDevice.getFirmwareUrl?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.getWorkspace?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.hasTimeCommands?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.runScript?4(script)
@@ -2410,6 +2416,7 @@
 eric6.MicroPython.PyBoardDevices.PyBoardDevice.deviceName?4()
 eric6.MicroPython.PyBoardDevices.PyBoardDevice.forceInterrupt?4()
 eric6.MicroPython.PyBoardDevices.PyBoardDevice.getDocumentationUrl?4()
+eric6.MicroPython.PyBoardDevices.PyBoardDevice.getFirmwareUrl?4()
 eric6.MicroPython.PyBoardDevices.PyBoardDevice.getWorkspace?4(silent=False)
 eric6.MicroPython.PyBoardDevices.PyBoardDevice.runScript?4(script)
 eric6.MicroPython.PyBoardDevices.PyBoardDevice.setButtons?4()
@@ -3234,9 +3241,11 @@
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.getExtensions?4()
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.getLanguages?4()
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.removeLanguage?4(lang)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.serviceErrorJSON?4(fx, lang, fn, msg)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.serviceErrorJavaScript?4(fx, lang, fn, msg)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.serviceErrorPy2?4(fx, lang, fn, msg)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.serviceErrorPy3?4(fx, lang, fn, msg)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.serviceErrorYAML?4(fx, lang, fn, msg)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.syntaxBatchCheck?4(argumentsList)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.syntaxCheck?4(lang, filename, source)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.SyntaxCheckService.syntaxChecked?7
@@ -3261,6 +3270,18 @@
 eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.jsSyntaxCheck?4(file, codestring)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.normalizeCode?4(codestring)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.worker?4(inputQueue, outputQueue)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.initBatchService?4()
+eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.initService?4()
+eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.jsonSyntaxBatchCheck?4(argumentsList, send, fx, cancelled, maxProcesses=0)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.jsonSyntaxCheck?4(file, codestring)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.normalizeCode?4(codestring)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.worker?4(inputQueue, outputQueue)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.initBatchService?4()
+eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.initService?4()
+eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.normalizeCode?4(codestring)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.worker?4(inputQueue, outputQueue)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.yamlSyntaxBatchCheck?4(argumentsList, send, fx, cancelled, maxProcesses=0)
+eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.yamlSyntaxCheck?4(file, codestring)
 eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag.get_line?4()
 eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag.get_lineno?4()
 eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag.get_msg?4()
@@ -11754,6 +11775,7 @@
 install.windowsDesktopNames?4()
 install.windowsProgramsEntry?4()
 install.wrapperNames?4(dname, wfile)
+install.yes2All?7
 patch_modpython.initGlobals?4()
 patch_modpython.main?4(argv)
 patch_modpython.modDir?7
--- a/eric6/DebugClients/Python/DebugVariables.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/DebugClients/Python/DebugVariables.py	Sun Dec 01 16:38:47 2019 +0100
@@ -414,7 +414,11 @@
         """
         d = {}
         start = count = 0
-        allItems = var.tolist()
+        try:
+            len(var)  # Check if it's an unsized object, e.g. np.ndarray(())
+            allItems = var.tolist()
+        except TypeError:  # TypeError: len() of unsized object
+            allItems = []
         
         for idx, value in enumerate(allItems):
             d[str(idx)] = value
--- a/eric6/Debugger/VariablesViewer.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Debugger/VariablesViewer.py	Sun Dec 01 16:38:47 2019 +0100
@@ -44,6 +44,7 @@
     rx_nonprintable = QRegExp(r"""(\\x\d\d)+""")
     
     noOfItemsStr = QCoreApplication.translate("VariablesViewer", "{0} items")
+    unsized = QCoreApplication.translate("VariablesViewer", "unsized")
     
     arrayTypes = {
         'list', 'tuple', 'dict', 'set', 'frozenset', 'numpy.ndarray',
@@ -178,8 +179,11 @@
             self.indicator = VariableItem.Type2Indicators.get(dtype, '')
         
         if dtype == 'numpy.ndarray':
-            self.childCount = int(dvalue.split('x')[0])
-            dvalue = VariableItem.noOfItemsStr.format(dvalue)
+            if dvalue:
+                self.childCount = int(dvalue.split('x')[0])
+                dvalue = VariableItem.noOfItemsStr.format(dvalue)
+            else:
+                dvalue = VariableItem.unsized
             self.hasChildren = True
         elif dtype in VariableItem.arrayTypes:
             self.childCount = int(dvalue)
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Help/source.qhp	Sun Dec 01 16:38:47 2019 +0100
@@ -309,6 +309,8 @@
                 <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html" />
                 <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html" />
                 <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html" />
+                <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html" />
+                <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html" />
               </section>
               <section title="eric6.Plugins.CheckerPlugins.Tabnanny" ref="index-eric6.Plugins.CheckerPlugins.Tabnanny.html">
                 <section title="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html" />
@@ -2352,6 +2354,7 @@
       <keyword name="CircuitPythonDevice.deviceName" id="CircuitPythonDevice.deviceName" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.deviceName" />
       <keyword name="CircuitPythonDevice.forceInterrupt" id="CircuitPythonDevice.forceInterrupt" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.forceInterrupt" />
       <keyword name="CircuitPythonDevice.getDocumentationUrl" id="CircuitPythonDevice.getDocumentationUrl" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.getDocumentationUrl" />
+      <keyword name="CircuitPythonDevice.getFirmwareUrl" id="CircuitPythonDevice.getFirmwareUrl" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.getFirmwareUrl" />
       <keyword name="CircuitPythonDevice.getWorkspace" id="CircuitPythonDevice.getWorkspace" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.getWorkspace" />
       <keyword name="CircuitPythonDevice.runScript" id="CircuitPythonDevice.runScript" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.runScript" />
       <keyword name="CircuitPythonDevice.setButtons" id="CircuitPythonDevice.setButtons" ref="eric6.MicroPython.CircuitPythonDevices.html#CircuitPythonDevice.setButtons" />
@@ -5359,6 +5362,7 @@
       <keyword name="EspDevice.deviceName" id="EspDevice.deviceName" ref="eric6.MicroPython.EspDevices.html#EspDevice.deviceName" />
       <keyword name="EspDevice.forceInterrupt" id="EspDevice.forceInterrupt" ref="eric6.MicroPython.EspDevices.html#EspDevice.forceInterrupt" />
       <keyword name="EspDevice.getDocumentationUrl" id="EspDevice.getDocumentationUrl" ref="eric6.MicroPython.EspDevices.html#EspDevice.getDocumentationUrl" />
+      <keyword name="EspDevice.getFirmwareUrl" id="EspDevice.getFirmwareUrl" ref="eric6.MicroPython.EspDevices.html#EspDevice.getFirmwareUrl" />
       <keyword name="EspDevice.runScript" id="EspDevice.runScript" ref="eric6.MicroPython.EspDevices.html#EspDevice.runScript" />
       <keyword name="EspDevice.setButtons" id="EspDevice.setButtons" ref="eric6.MicroPython.EspDevices.html#EspDevice.setButtons" />
       <keyword name="EspDevices (Module)" id="EspDevices (Module)" ref="eric6.MicroPython.EspDevices.html" />
@@ -9645,9 +9649,11 @@
       <keyword name="MicroPythonDevice.deviceName" id="MicroPythonDevice.deviceName" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.deviceName" />
       <keyword name="MicroPythonDevice.forceInterrupt" id="MicroPythonDevice.forceInterrupt" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.forceInterrupt" />
       <keyword name="MicroPythonDevice.getDocumentationUrl" id="MicroPythonDevice.getDocumentationUrl" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.getDocumentationUrl" />
+      <keyword name="MicroPythonDevice.getFirmwareUrl" id="MicroPythonDevice.getFirmwareUrl" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.getFirmwareUrl" />
       <keyword name="MicroPythonDevice.getWorkspace" id="MicroPythonDevice.getWorkspace" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.getWorkspace" />
       <keyword name="MicroPythonDevice.handleDataFlood" id="MicroPythonDevice.handleDataFlood" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.handleDataFlood" />
       <keyword name="MicroPythonDevice.hasDocumentationUrl" id="MicroPythonDevice.hasDocumentationUrl" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.hasDocumentationUrl" />
+      <keyword name="MicroPythonDevice.hasFirmwareUrl" id="MicroPythonDevice.hasFirmwareUrl" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.hasFirmwareUrl" />
       <keyword name="MicroPythonDevice.hasTimeCommands" id="MicroPythonDevice.hasTimeCommands" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.hasTimeCommands" />
       <keyword name="MicroPythonDevice.runScript" id="MicroPythonDevice.runScript" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.runScript" />
       <keyword name="MicroPythonDevice.sendCommands" id="MicroPythonDevice.sendCommands" ref="eric6.MicroPython.MicroPythonDevices.html#MicroPythonDevice.sendCommands" />
@@ -9754,6 +9760,7 @@
       <keyword name="MicroPythonWidget.__crossCompile" id="MicroPythonWidget.__crossCompile" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__crossCompile" />
       <keyword name="MicroPythonWidget.__disconnectFromDevice" id="MicroPythonWidget.__disconnectFromDevice" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__disconnectFromDevice" />
       <keyword name="MicroPythonWidget.__doZoom" id="MicroPythonWidget.__doZoom" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__doZoom" />
+      <keyword name="MicroPythonWidget.__downloadFirmware" id="MicroPythonWidget.__downloadFirmware" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__downloadFirmware" />
       <keyword name="MicroPythonWidget.__getDeviceTime" id="MicroPythonWidget.__getDeviceTime" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__getDeviceTime" />
       <keyword name="MicroPythonWidget.__handlePreferencesChanged" id="MicroPythonWidget.__handlePreferencesChanged" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__handlePreferencesChanged" />
       <keyword name="MicroPythonWidget.__mpyCrossAvailable" id="MicroPythonWidget.__mpyCrossAvailable" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__mpyCrossAvailable" />
@@ -9768,6 +9775,7 @@
       <keyword name="MicroPythonWidget.__showDocumentation" id="MicroPythonWidget.__showDocumentation" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showDocumentation" />
       <keyword name="MicroPythonWidget.__showError" id="MicroPythonWidget.__showError" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showError" />
       <keyword name="MicroPythonWidget.__showImplementation" id="MicroPythonWidget.__showImplementation" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showImplementation" />
+      <keyword name="MicroPythonWidget.__showLocalAndDeviceTime" id="MicroPythonWidget.__showLocalAndDeviceTime" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showLocalAndDeviceTime" />
       <keyword name="MicroPythonWidget.__showLocalTime" id="MicroPythonWidget.__showLocalTime" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showLocalTime" />
       <keyword name="MicroPythonWidget.__showNoDeviceMessage" id="MicroPythonWidget.__showNoDeviceMessage" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showNoDeviceMessage" />
       <keyword name="MicroPythonWidget.__synchronizeTime" id="MicroPythonWidget.__synchronizeTime" ref="eric6.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__synchronizeTime" />
@@ -9802,6 +9810,7 @@
       <keyword name="MicrobitDevice.deviceName" id="MicrobitDevice.deviceName" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.deviceName" />
       <keyword name="MicrobitDevice.forceInterrupt" id="MicrobitDevice.forceInterrupt" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.forceInterrupt" />
       <keyword name="MicrobitDevice.getDocumentationUrl" id="MicrobitDevice.getDocumentationUrl" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.getDocumentationUrl" />
+      <keyword name="MicrobitDevice.getFirmwareUrl" id="MicrobitDevice.getFirmwareUrl" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.getFirmwareUrl" />
       <keyword name="MicrobitDevice.getWorkspace" id="MicrobitDevice.getWorkspace" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.getWorkspace" />
       <keyword name="MicrobitDevice.hasTimeCommands" id="MicrobitDevice.hasTimeCommands" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.hasTimeCommands" />
       <keyword name="MicrobitDevice.runScript" id="MicrobitDevice.runScript" ref="eric6.MicroPython.MicrobitDevices.html#MicrobitDevice.runScript" />
@@ -11719,7 +11728,12 @@
       <keyword name="PyBoardDevice" id="PyBoardDevice" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice" />
       <keyword name="PyBoardDevice (Constructor)" id="PyBoardDevice (Constructor)" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__init__" />
       <keyword name="PyBoardDevice.__deviceVolumeMounted" id="PyBoardDevice.__deviceVolumeMounted" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__deviceVolumeMounted" />
-      <keyword name="PyBoardDevice.__showInstallInstructions" id="PyBoardDevice.__showInstallInstructions" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__showInstallInstructions" />
+      <keyword name="PyBoardDevice.__dfuUtilAvailable" id="PyBoardDevice.__dfuUtilAvailable" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__dfuUtilAvailable" />
+      <keyword name="PyBoardDevice.__flashMicroPython" id="PyBoardDevice.__flashMicroPython" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__flashMicroPython" />
+      <keyword name="PyBoardDevice.__listDfuCapableDevices" id="PyBoardDevice.__listDfuCapableDevices" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__listDfuCapableDevices" />
+      <keyword name="PyBoardDevice.__showDfuDisableInstructions" id="PyBoardDevice.__showDfuDisableInstructions" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__showDfuDisableInstructions" />
+      <keyword name="PyBoardDevice.__showDfuEnableInstructions" id="PyBoardDevice.__showDfuEnableInstructions" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__showDfuEnableInstructions" />
+      <keyword name="PyBoardDevice.__showFlashInstructions" id="PyBoardDevice.__showFlashInstructions" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.__showFlashInstructions" />
       <keyword name="PyBoardDevice.addDeviceMenuEntries" id="PyBoardDevice.addDeviceMenuEntries" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.addDeviceMenuEntries" />
       <keyword name="PyBoardDevice.canRunScript" id="PyBoardDevice.canRunScript" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.canRunScript" />
       <keyword name="PyBoardDevice.canStartFileManager" id="PyBoardDevice.canStartFileManager" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.canStartFileManager" />
@@ -11728,6 +11742,7 @@
       <keyword name="PyBoardDevice.deviceName" id="PyBoardDevice.deviceName" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.deviceName" />
       <keyword name="PyBoardDevice.forceInterrupt" id="PyBoardDevice.forceInterrupt" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.forceInterrupt" />
       <keyword name="PyBoardDevice.getDocumentationUrl" id="PyBoardDevice.getDocumentationUrl" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.getDocumentationUrl" />
+      <keyword name="PyBoardDevice.getFirmwareUrl" id="PyBoardDevice.getFirmwareUrl" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.getFirmwareUrl" />
       <keyword name="PyBoardDevice.getWorkspace" id="PyBoardDevice.getWorkspace" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.getWorkspace" />
       <keyword name="PyBoardDevice.runScript" id="PyBoardDevice.runScript" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.runScript" />
       <keyword name="PyBoardDevice.setButtons" id="PyBoardDevice.setButtons" ref="eric6.MicroPython.PyBoardDevices.html#PyBoardDevice.setButtons" />
@@ -14349,9 +14364,11 @@
       <keyword name="SyntaxCheckService.getExtensions" id="SyntaxCheckService.getExtensions" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.getExtensions" />
       <keyword name="SyntaxCheckService.getLanguages" id="SyntaxCheckService.getLanguages" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.getLanguages" />
       <keyword name="SyntaxCheckService.removeLanguage" id="SyntaxCheckService.removeLanguage" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.removeLanguage" />
+      <keyword name="SyntaxCheckService.serviceErrorJSON" id="SyntaxCheckService.serviceErrorJSON" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.serviceErrorJSON" />
       <keyword name="SyntaxCheckService.serviceErrorJavaScript" id="SyntaxCheckService.serviceErrorJavaScript" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.serviceErrorJavaScript" />
       <keyword name="SyntaxCheckService.serviceErrorPy2" id="SyntaxCheckService.serviceErrorPy2" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.serviceErrorPy2" />
       <keyword name="SyntaxCheckService.serviceErrorPy3" id="SyntaxCheckService.serviceErrorPy3" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.serviceErrorPy3" />
+      <keyword name="SyntaxCheckService.serviceErrorYAML" id="SyntaxCheckService.serviceErrorYAML" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.serviceErrorYAML" />
       <keyword name="SyntaxCheckService.syntaxBatchCheck" id="SyntaxCheckService.syntaxBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.syntaxBatchCheck" />
       <keyword name="SyntaxCheckService.syntaxCheck" id="SyntaxCheckService.syntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html#SyntaxCheckService.syntaxCheck" />
       <keyword name="SyntaxChecker (Package)" id="SyntaxChecker (Package)" ref="index-eric6.Plugins.CheckerPlugins.SyntaxChecker.html" />
@@ -16910,6 +16927,7 @@
       <keyword name="__initChannelModesDict" id="__initChannelModesDict" ref="eric6.Network.IRC.IrcUtilities.html#__initChannelModesDict" />
       <keyword name="__initializeCondaInterface" id="__initializeCondaInterface" ref="eric6.CondaInterface.__init__.html#__initializeCondaInterface" />
       <keyword name="__jsSyntaxCheck" id="__jsSyntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#__jsSyntaxCheck" />
+      <keyword name="__jsonSyntaxCheck" id="__jsonSyntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#__jsonSyntaxCheck" />
       <keyword name="__mapType" id="__mapType" ref="eric6.Project.UicLoadUi.html#__mapType" />
       <keyword name="__messageBox" id="__messageBox" ref="eric6.E5Gui.E5MessageBox.html#__messageBox" />
       <keyword name="__pyName" id="__pyName" ref="compileUiFiles.html#__pyName" />
@@ -16923,6 +16941,7 @@
       <keyword name="__setAction" id="__setAction" ref="eric6.Preferences.Shortcuts.html#__setAction" />
       <keyword name="__showwarning" id="__showwarning" ref="eric6.Utilities.__init__.html#__showwarning" />
       <keyword name="__syntaxAndPyflakesCheck" id="__syntaxAndPyflakesCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#__syntaxAndPyflakesCheck" />
+      <keyword name="__yamlSyntaxCheck" id="__yamlSyntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#__yamlSyntaxCheck" />
       <keyword name="_add_check" id="_add_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_add_check" />
       <keyword name="_break_around_binary_operators" id="_break_around_binary_operators" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_break_around_binary_operators" />
       <keyword name="_buildChildrenLists" id="_buildChildrenLists" ref="eric6.Graphics.GraphicsUtilities.html#_buildChildrenLists" />
@@ -17401,6 +17420,8 @@
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#initBatchService" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#initBatchService" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#initBatchService" />
+      <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#initBatchService" />
+      <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#initBatchService" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#initBatchService" />
       <keyword name="initDebugger" id="initDebugger" ref="eric6.DebugClients.Python.eric6dbgstub.html#initDebugger" />
       <keyword name="initGlobals" id="initGlobals" ref="install-debugclients.html#initGlobals" />
@@ -17414,6 +17435,8 @@
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#initService" />
+      <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#initService" />
+      <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#initService" />
       <keyword name="initializeResourceSearchPath" id="initializeResourceSearchPath" ref="eric6.Toolbox.Startup.html#initializeResourceSearchPath" />
       <keyword name="install (Module)" id="install (Module)" ref="install.html" />
@@ -17462,6 +17485,9 @@
       <keyword name="jsSyntaxBatchCheck" id="jsSyntaxBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#jsSyntaxBatchCheck" />
       <keyword name="jsSyntaxCheck" id="jsSyntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#jsSyntaxCheck" />
       <keyword name="jsclbr (Module)" id="jsclbr (Module)" ref="eric6.Utilities.ClassBrowsers.jsclbr.html" />
+      <keyword name="jsonCheckSyntax (Module)" id="jsonCheckSyntax (Module)" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html" />
+      <keyword name="jsonSyntaxBatchCheck" id="jsonSyntaxBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#jsonSyntaxBatchCheck" />
+      <keyword name="jsonSyntaxCheck" id="jsonSyntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#jsonSyntaxCheck" />
       <keyword name="largefiles (Module)" id="largefiles (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.html" />
       <keyword name="linesep" id="linesep" ref="eric6.Utilities.__init__.html#linesep" />
       <keyword name="listdirStat" id="listdirStat" ref="eric6.MicroPython.MicroPythonFileSystemUtilities.html#listdirStat" />
@@ -17523,6 +17549,8 @@
       <keyword name="normabspath" id="normabspath" ref="eric6.Utilities.__init__.html#normabspath" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#normalizeCode" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#normalizeCode" />
+      <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#normalizeCode" />
+      <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#normalizeCode" />
       <keyword name="normalize_paths" id="normalize_paths" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#normalize_paths" />
       <keyword name="normalize_ws" id="normalize_ws" ref="eric6.E5Network.E5RFC6266.html#normalize_ws" />
       <keyword name="normcaseabspath" id="normcaseabspath" ref="eric6.Utilities.__init__.html#normcaseabspath" />
@@ -17800,12 +17828,17 @@
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#worker" />
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#worker" />
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#worker" />
+      <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#worker" />
+      <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#worker" />
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#worker" />
       <keyword name="wrapperNames" id="wrapperNames" ref="install.html#wrapperNames" />
       <keyword name="wrapperNames" id="wrapperNames" ref="uninstall.html#wrapperNames" />
       <keyword name="writeEncodedFile" id="writeEncodedFile" ref="eric6.Utilities.__init__.html#writeEncodedFile" />
       <keyword name="writePlist" id="writePlist" ref="eric6.Utilities.binplistlib.html#writePlist" />
       <keyword name="writePlistToBytes" id="writePlistToBytes" ref="eric6.Utilities.binplistlib.html#writePlistToBytes" />
+      <keyword name="yamlCheckSyntax (Module)" id="yamlCheckSyntax (Module)" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html" />
+      <keyword name="yamlSyntaxBatchCheck" id="yamlSyntaxBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#yamlSyntaxBatchCheck" />
+      <keyword name="yamlSyntaxCheck" id="yamlSyntaxCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#yamlSyntaxCheck" />
       <keyword name="yesNo" id="yesNo" ref="eric6.E5Gui.E5MessageBox.html#yesNo" />
     </keywords>
     <files>
@@ -18054,6 +18087,8 @@
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html</file>
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog.html</file>
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html</file>
+      <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html</file>
+      <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html</file>
       <file>eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html</file>
       <file>eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html</file>
       <file>eric6.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.html</file>
--- a/eric6/Documentation/Source/eric6.Debugger.VariablesViewer.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.Debugger.VariablesViewer.html	Sun Dec 01 16:38:47 2019 +0100
@@ -69,7 +69,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>Type2Indicators</td></tr><tr><td>arrayTypes</td></tr><tr><td>noOfItemsStr</td></tr><tr><td>nonExpandableTypes</td></tr><tr><td>rx_nonprintable</td></tr>
+<tr><td>Type2Indicators</td></tr><tr><td>arrayTypes</td></tr><tr><td>noOfItemsStr</td></tr><tr><td>nonExpandableTypes</td></tr><tr><td>rx_nonprintable</td></tr><tr><td>unsized</td></tr>
 </table>
 <h3>Class Methods</h3>
 
--- a/eric6/Documentation/Source/eric6.MicroPython.CircuitPythonDevices.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.CircuitPythonDevices.html	Sun Dec 01 16:38:47 2019 +0100
@@ -117,6 +117,10 @@
 <td>Public method to get the device documentation URL.</td>
 </tr>
 <tr>
+<td><a href="#CircuitPythonDevice.getFirmwareUrl">getFirmwareUrl</a></td>
+<td>Public method to get the device firmware download URL.</td>
+</tr>
+<tr>
 <td><a href="#CircuitPythonDevice.getWorkspace">getWorkspace</a></td>
 <td>Public method to get the workspace directory.</td>
 </tr>
@@ -342,6 +346,25 @@
 str
 </dd>
 </dl>
+<a NAME="CircuitPythonDevice.getFirmwareUrl" ID="CircuitPythonDevice.getFirmwareUrl"></a>
+<h4>CircuitPythonDevice.getFirmwareUrl</h4>
+<b>getFirmwareUrl</b>(<i></i>)
+
+<p>
+        Public method to get the device firmware download URL.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+firmware download URL of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="CircuitPythonDevice.getWorkspace" ID="CircuitPythonDevice.getWorkspace"></a>
 <h4>CircuitPythonDevice.getWorkspace</h4>
 <b>getWorkspace</b>(<i>silent=False</i>)
--- a/eric6/Documentation/Source/eric6.MicroPython.EspDevices.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.EspDevices.html	Sun Dec 01 16:38:47 2019 +0100
@@ -126,6 +126,10 @@
 <td>Public method to get the device documentation URL.</td>
 </tr>
 <tr>
+<td><a href="#EspDevice.getFirmwareUrl">getFirmwareUrl</a></td>
+<td>Public method to get the device firmware download URL.</td>
+</tr>
+<tr>
 <td><a href="#EspDevice.runScript">runScript</a></td>
 <td>Public method to run the given Python script.</td>
 </tr>
@@ -352,6 +356,25 @@
 str
 </dd>
 </dl>
+<a NAME="EspDevice.getFirmwareUrl" ID="EspDevice.getFirmwareUrl"></a>
+<h4>EspDevice.getFirmwareUrl</h4>
+<b>getFirmwareUrl</b>(<i></i>)
+
+<p>
+        Public method to get the device firmware download URL.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+firmware download URL of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="EspDevice.runScript" ID="EspDevice.runScript"></a>
 <h4>EspDevice.runScript</h4>
 <b>runScript</b>(<i>script</i>)
--- a/eric6/Documentation/Source/eric6.MicroPython.MicroPythonDevices.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.MicroPythonDevices.html	Sun Dec 01 16:38:47 2019 +0100
@@ -122,6 +122,10 @@
 <td>Public method to get the device documentation URL.</td>
 </tr>
 <tr>
+<td><a href="#MicroPythonDevice.getFirmwareUrl">getFirmwareUrl</a></td>
+<td>Public method to get the device firmware download URL.</td>
+</tr>
+<tr>
 <td><a href="#MicroPythonDevice.getWorkspace">getWorkspace</a></td>
 <td>Public method to get the workspace directory.</td>
 </tr>
@@ -134,6 +138,10 @@
 <td>Public method to check, if the device has a configured documentation URL.</td>
 </tr>
 <tr>
+<td><a href="#MicroPythonDevice.hasFirmwareUrl">hasFirmwareUrl</a></td>
+<td>Public method to check, if the device has a configured firmware download URL.</td>
+</tr>
+<tr>
 <td><a href="#MicroPythonDevice.hasTimeCommands">hasTimeCommands</a></td>
 <td>Public method to check, if the device supports time commands.</td>
 </tr>
@@ -342,6 +350,25 @@
 str
 </dd>
 </dl>
+<a NAME="MicroPythonDevice.getFirmwareUrl" ID="MicroPythonDevice.getFirmwareUrl"></a>
+<h4>MicroPythonDevice.getFirmwareUrl</h4>
+<b>getFirmwareUrl</b>(<i></i>)
+
+<p>
+        Public method to get the device firmware download URL.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+firmware download URL of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="MicroPythonDevice.getWorkspace" ID="MicroPythonDevice.getWorkspace"></a>
 <h4>MicroPythonDevice.getWorkspace</h4>
 <b>getWorkspace</b>(<i></i>)
@@ -388,6 +415,26 @@
 bool
 </dd>
 </dl>
+<a NAME="MicroPythonDevice.hasFirmwareUrl" ID="MicroPythonDevice.hasFirmwareUrl"></a>
+<h4>MicroPythonDevice.hasFirmwareUrl</h4>
+<b>hasFirmwareUrl</b>(<i></i>)
+
+<p>
+        Public method to check, if the device has a configured firmware
+        download URL.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a configured firmware download URL
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <a NAME="MicroPythonDevice.hasTimeCommands" ID="MicroPythonDevice.hasTimeCommands"></a>
 <h4>MicroPythonDevice.hasTimeCommands</h4>
 <b>hasTimeCommands</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.MicroPython.MicroPythonWidget.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.MicroPythonWidget.html	Sun Dec 01 16:38:47 2019 +0100
@@ -118,6 +118,10 @@
 <td>Private slot to zoom the REPL pane.</td>
 </tr>
 <tr>
+<td><a href="#MicroPythonWidget.__downloadFirmware">__downloadFirmware</a></td>
+<td>Private slot to open the firmware download page.</td>
+</tr>
+<tr>
 <td><a href="#MicroPythonWidget.__getDeviceTime">__getDeviceTime</a></td>
 <td>Private method to get a string containing the date and time of the connected device.</td>
 </tr>
@@ -174,6 +178,10 @@
 <td>Private slot to show some implementation related information.</td>
 </tr>
 <tr>
+<td><a href="#MicroPythonWidget.__showLocalAndDeviceTime">__showLocalAndDeviceTime</a></td>
+<td>Private slot to show the local and device time side-by-side.</td>
+</tr>
+<tr>
 <td><a href="#MicroPythonWidget.__showLocalTime">__showLocalTime</a></td>
 <td>Private slot to show the local date and time.</td>
 </tr>
@@ -355,6 +363,13 @@
 zoom value
 </dd>
 </dl>
+<a NAME="MicroPythonWidget.__downloadFirmware" ID="MicroPythonWidget.__downloadFirmware"></a>
+<h4>MicroPythonWidget.__downloadFirmware</h4>
+<b>__downloadFirmware</b>(<i></i>)
+
+<p>
+        Private slot to open the firmware download page.
+</p>
 <a NAME="MicroPythonWidget.__getDeviceTime" ID="MicroPythonWidget.__getDeviceTime"></a>
 <h4>MicroPythonWidget.__getDeviceTime</h4>
 <b>__getDeviceTime</b>(<i></i>)
@@ -574,6 +589,13 @@
 <p>
         Private slot to show some implementation related information.
 </p>
+<a NAME="MicroPythonWidget.__showLocalAndDeviceTime" ID="MicroPythonWidget.__showLocalAndDeviceTime"></a>
+<h4>MicroPythonWidget.__showLocalAndDeviceTime</h4>
+<b>__showLocalAndDeviceTime</b>(<i></i>)
+
+<p>
+        Private slot to show the local and device time side-by-side.
+</p>
 <a NAME="MicroPythonWidget.__showLocalTime" ID="MicroPythonWidget.__showLocalTime"></a>
 <h4>MicroPythonWidget.__showLocalTime</h4>
 <b>__showLocalTime</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.MicroPython.MicrobitDevices.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.MicrobitDevices.html	Sun Dec 01 16:38:47 2019 +0100
@@ -121,6 +121,10 @@
 <td>Public method to get the device documentation URL.</td>
 </tr>
 <tr>
+<td><a href="#MicrobitDevice.getFirmwareUrl">getFirmwareUrl</a></td>
+<td>Public method to get the device firmware download URL.</td>
+</tr>
+<tr>
 <td><a href="#MicrobitDevice.getWorkspace">getWorkspace</a></td>
 <td>Public method to get the workspace directory.</td>
 </tr>
@@ -350,6 +354,25 @@
 str
 </dd>
 </dl>
+<a NAME="MicrobitDevice.getFirmwareUrl" ID="MicrobitDevice.getFirmwareUrl"></a>
+<h4>MicrobitDevice.getFirmwareUrl</h4>
+<b>getFirmwareUrl</b>(<i></i>)
+
+<p>
+        Public method to get the device firmware download URL.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+firmware download URL of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="MicrobitDevice.getWorkspace" ID="MicrobitDevice.getWorkspace"></a>
 <h4>MicrobitDevice.getWorkspace</h4>
 <b>getWorkspace</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.MicroPython.PyBoardDevices.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.PyBoardDevices.html	Sun Dec 01 16:38:47 2019 +0100
@@ -77,7 +77,27 @@
 <td>Private method to check, if the device volume is mounted.</td>
 </tr>
 <tr>
-<td><a href="#PyBoardDevice.__showInstallInstructions">__showInstallInstructions</a></td>
+<td><a href="#PyBoardDevice.__dfuUtilAvailable">__dfuUtilAvailable</a></td>
+<td>Private method to check the availability of dfu-util.</td>
+</tr>
+<tr>
+<td><a href="#PyBoardDevice.__flashMicroPython">__flashMicroPython</a></td>
+<td>Private slot to flash a MicroPython firmware.</td>
+</tr>
+<tr>
+<td><a href="#PyBoardDevice.__listDfuCapableDevices">__listDfuCapableDevices</a></td>
+<td>Private slot to list all DFU-capable devices.</td>
+</tr>
+<tr>
+<td><a href="#PyBoardDevice.__showDfuDisableInstructions">__showDfuDisableInstructions</a></td>
+<td>Private method to show some instructions to disable the DFU mode.</td>
+</tr>
+<tr>
+<td><a href="#PyBoardDevice.__showDfuEnableInstructions">__showDfuEnableInstructions</a></td>
+<td>Private method to show some instructions to enable the DFU mode.</td>
+</tr>
+<tr>
+<td><a href="#PyBoardDevice.__showFlashInstructions">__showFlashInstructions</a></td>
 <td>Private slot to open the URL containing instructions for installing MicroPython on the pyboard.</td>
 </tr>
 <tr>
@@ -113,6 +133,10 @@
 <td>Public method to get the device documentation URL.</td>
 </tr>
 <tr>
+<td><a href="#PyBoardDevice.getFirmwareUrl">getFirmwareUrl</a></td>
+<td>Public method to get the device firmware download URL.</td>
+</tr>
+<tr>
 <td><a href="#PyBoardDevice.getWorkspace">getWorkspace</a></td>
 <td>Public method to get the workspace directory.</td>
 </tr>
@@ -172,9 +196,75 @@
 bool
 </dd>
 </dl>
-<a NAME="PyBoardDevice.__showInstallInstructions" ID="PyBoardDevice.__showInstallInstructions"></a>
-<h4>PyBoardDevice.__showInstallInstructions</h4>
-<b>__showInstallInstructions</b>(<i></i>)
+<a NAME="PyBoardDevice.__dfuUtilAvailable" ID="PyBoardDevice.__dfuUtilAvailable"></a>
+<h4>PyBoardDevice.__dfuUtilAvailable</h4>
+<b>__dfuUtilAvailable</b>(<i></i>)
+
+<p>
+        Private method to check the availability of dfu-util.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the availability of dfu-util
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PyBoardDevice.__flashMicroPython" ID="PyBoardDevice.__flashMicroPython"></a>
+<h4>PyBoardDevice.__flashMicroPython</h4>
+<b>__flashMicroPython</b>(<i></i>)
+
+<p>
+        Private slot to flash a MicroPython firmware.
+</p>
+<a NAME="PyBoardDevice.__listDfuCapableDevices" ID="PyBoardDevice.__listDfuCapableDevices"></a>
+<h4>PyBoardDevice.__listDfuCapableDevices</h4>
+<b>__listDfuCapableDevices</b>(<i></i>)
+
+<p>
+        Private slot to list all DFU-capable devices.
+</p>
+<a NAME="PyBoardDevice.__showDfuDisableInstructions" ID="PyBoardDevice.__showDfuDisableInstructions"></a>
+<h4>PyBoardDevice.__showDfuDisableInstructions</h4>
+<b>__showDfuDisableInstructions</b>(<i></i>)
+
+<p>
+        Private method to show some instructions to disable the DFU mode.
+</p>
+<a NAME="PyBoardDevice.__showDfuEnableInstructions" ID="PyBoardDevice.__showDfuEnableInstructions"></a>
+<h4>PyBoardDevice.__showDfuEnableInstructions</h4>
+<b>__showDfuEnableInstructions</b>(<i>flash=True</i>)
+
+<p>
+        Private method to show some instructions to enable the DFU mode.
+</p>
+<dl>
+
+<dt><i>flash</i> (bool)</dt>
+<dd>
+flag indicating to show a warning message for flashing
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating OK to continue or abort
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PyBoardDevice.__showFlashInstructions" ID="PyBoardDevice.__showFlashInstructions"></a>
+<h4>PyBoardDevice.__showFlashInstructions</h4>
+<b>__showFlashInstructions</b>(<i></i>)
 
 <p>
         Private slot to open the URL containing instructions for installing
@@ -332,6 +422,25 @@
 str
 </dd>
 </dl>
+<a NAME="PyBoardDevice.getFirmwareUrl" ID="PyBoardDevice.getFirmwareUrl"></a>
+<h4>PyBoardDevice.getFirmwareUrl</h4>
+<b>getFirmwareUrl</b>(<i></i>)
+
+<p>
+        Public method to get the device firmware download URL.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+firmware download URL of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="PyBoardDevice.getWorkspace" ID="PyBoardDevice.getWorkspace"></a>
 <h4>PyBoardDevice.getWorkspace</h4>
 <b>getWorkspace</b>(<i>silent=False</i>)
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html	Sun Dec 01 16:38:47 2019 +0100
@@ -69,7 +69,7 @@
 </tr>
 <tr>
 <td><a href="#worker">worker</a></td>
-<td>Module function acting as the parallel worker for the style check.</td>
+<td>Module function acting as the parallel worker for the syntax check.</td>
 </tr>
 </table>
 <hr />
@@ -284,7 +284,7 @@
 <b>worker</b>(<i>inputQueue, outputQueue</i>)
 
 <p>
-    Module function acting as the parallel worker for the style check.
+    Module function acting as the parallel worker for the syntax check.
 </p>
 <dl>
 
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html	Sun Dec 01 16:38:47 2019 +0100
@@ -128,6 +128,10 @@
 <td>Public method to remove the language from syntax check.</td>
 </tr>
 <tr>
+<td><a href="#SyntaxCheckService.serviceErrorJSON">serviceErrorJSON</a></td>
+<td>Public method handling service errors for JSON.</td>
+</tr>
+<tr>
 <td><a href="#SyntaxCheckService.serviceErrorJavaScript">serviceErrorJavaScript</a></td>
 <td>Public method handling service errors for JavaScript.</td>
 </tr>
@@ -140,6 +144,10 @@
 <td>Public method handling service errors for Python 2.</td>
 </tr>
 <tr>
+<td><a href="#SyntaxCheckService.serviceErrorYAML">serviceErrorYAML</a></td>
+<td>Public method handling service errors for YAML.</td>
+</tr>
+<tr>
 <td><a href="#SyntaxCheckService.syntaxBatchCheck">syntaxBatchCheck</a></td>
 <td>Public method to prepare a syntax check on multiple source files.</td>
 </tr>
@@ -314,6 +322,32 @@
 language to remove (str)
 </dd>
 </dl>
+<a NAME="SyntaxCheckService.serviceErrorJSON" ID="SyntaxCheckService.serviceErrorJSON"></a>
+<h4>SyntaxCheckService.serviceErrorJSON</h4>
+<b>serviceErrorJSON</b>(<i>fx, lang, fn, msg</i>)
+
+<p>
+        Public method handling service errors for JSON.
+</p>
+<dl>
+
+<dt><i>fx</i></dt>
+<dd>
+service name (string)
+</dd>
+<dt><i>lang</i></dt>
+<dd>
+language (string)
+</dd>
+<dt><i>fn</i></dt>
+<dd>
+file name (string)
+</dd>
+<dt><i>msg</i></dt>
+<dd>
+message text (string)
+</dd>
+</dl>
 <a NAME="SyntaxCheckService.serviceErrorJavaScript" ID="SyntaxCheckService.serviceErrorJavaScript"></a>
 <h4>SyntaxCheckService.serviceErrorJavaScript</h4>
 <b>serviceErrorJavaScript</b>(<i>fx, lang, fn, msg</i>)
@@ -392,6 +426,32 @@
 message text (string)
 </dd>
 </dl>
+<a NAME="SyntaxCheckService.serviceErrorYAML" ID="SyntaxCheckService.serviceErrorYAML"></a>
+<h4>SyntaxCheckService.serviceErrorYAML</h4>
+<b>serviceErrorYAML</b>(<i>fx, lang, fn, msg</i>)
+
+<p>
+        Public method handling service errors for YAML.
+</p>
+<dl>
+
+<dt><i>fx</i></dt>
+<dd>
+service name (string)
+</dd>
+<dt><i>lang</i></dt>
+<dd>
+language (string)
+</dd>
+<dt><i>fn</i></dt>
+<dd>
+file name (string)
+</dd>
+<dt><i>msg</i></dt>
+<dd>
+message text (string)
+</dd>
+</dl>
 <a NAME="SyntaxCheckService.syntaxBatchCheck" ID="SyntaxCheckService.syntaxBatchCheck"></a>
 <h4>SyntaxCheckService.syntaxBatchCheck</h4>
 <b>syntaxBatchCheck</b>(<i>argumentsList</i>)
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html	Sun Dec 01 16:38:47 2019 +0100
@@ -23,7 +23,7 @@
 <h1>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax</h1>
 
 <p>
-Module implementing the syntax check for Python 2/3.
+Module implementing the syntax check for JavaScript.
 </p>
 <h3>Global Attributes</h3>
 
@@ -65,7 +65,7 @@
 </tr>
 <tr>
 <td><a href="#worker">worker</a></td>
-<td>Module function acting as the parallel worker for the style check.</td>
+<td>Module function acting as the parallel worker for the syntax check.</td>
 </tr>
 </table>
 <hr />
@@ -223,7 +223,7 @@
 <b>worker</b>(<i>inputQueue, outputQueue</i>)
 
 <p>
-    Module function acting as the parallel worker for the style check.
+    Module function acting as the parallel worker for the syntax check.
 </p>
 <dl>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html	Sun Dec 01 16:38:47 2019 +0100
@@ -0,0 +1,271 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax</h1>
+
+<p>
+Module implementing the syntax check for JSON.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#__jsonSyntaxCheck">__jsonSyntaxCheck</a></td>
+<td>Function to check a YAML source file for syntax errors.</td>
+</tr>
+<tr>
+<td><a href="#initBatchService">initBatchService</a></td>
+<td>Initialize the batch service and return the entry point.</td>
+</tr>
+<tr>
+<td><a href="#initService">initService</a></td>
+<td>Initialize the service and return the entry point.</td>
+</tr>
+<tr>
+<td><a href="#jsonSyntaxBatchCheck">jsonSyntaxBatchCheck</a></td>
+<td>Module function to check syntax for a batch of files.</td>
+</tr>
+<tr>
+<td><a href="#jsonSyntaxCheck">jsonSyntaxCheck</a></td>
+<td>Function to check a JSON source file for syntax errors.</td>
+</tr>
+<tr>
+<td><a href="#normalizeCode">normalizeCode</a></td>
+<td>Function to normalize the given code.</td>
+</tr>
+<tr>
+<td><a href="#worker">worker</a></td>
+<td>Module function acting as the parallel worker for the syntax check.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="__jsonSyntaxCheck" ID="__jsonSyntaxCheck"></a>
+<h2>__jsonSyntaxCheck</h2>
+<b>__jsonSyntaxCheck</b>(<i>file, codestring</i>)
+
+<p>
+    Function to check a YAML source file for syntax errors.
+</p>
+<dl>
+
+<dt><i>file</i> (str)</dt>
+<dd>
+source filename
+</dd>
+<dt><i>codestring</i> (str)</dt>
+<dd>
+string containing the code to check
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="initBatchService" ID="initBatchService"></a>
+<h2>initBatchService</h2>
+<b>initBatchService</b>(<i></i>)
+
+<p>
+    Initialize the batch service and return the entry point.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+the entry point for the background client
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+func
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="initService" ID="initService"></a>
+<h2>initService</h2>
+<b>initService</b>(<i></i>)
+
+<p>
+    Initialize the service and return the entry point.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+the entry point for the background client
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+func
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="jsonSyntaxBatchCheck" ID="jsonSyntaxBatchCheck"></a>
+<h2>jsonSyntaxBatchCheck</h2>
+<b>jsonSyntaxBatchCheck</b>(<i>argumentsList, send, fx, cancelled, maxProcesses=0</i>)
+
+<p>
+    Module function to check syntax for a batch of files.
+</p>
+<dl>
+
+<dt><i>argumentsList</i> (list)</dt>
+<dd>
+list of arguments tuples as given for yamlSyntaxCheck
+</dd>
+<dt><i>send</i> (func)</dt>
+<dd>
+reference to send function
+</dd>
+<dt><i>fx</i> (str)</dt>
+<dd>
+registered service name
+</dd>
+<dt><i>cancelled</i> (func)</dt>
+<dd>
+reference to function checking for a cancellation
+</dd>
+<dt><i>maxProcesses</i> (int)</dt>
+<dd>
+number of processes to be used
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="jsonSyntaxCheck" ID="jsonSyntaxCheck"></a>
+<h2>jsonSyntaxCheck</h2>
+<b>jsonSyntaxCheck</b>(<i>file, codestring</i>)
+
+<p>
+    Function to check a JSON source file for syntax errors.
+</p>
+<dl>
+
+<dt><i>file</i> (str)</dt>
+<dd>
+source filename
+</dd>
+<dt><i>codestring</i> (str)</dt>
+<dd>
+string containing the code to check
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="normalizeCode" ID="normalizeCode"></a>
+<h2>normalizeCode</h2>
+<b>normalizeCode</b>(<i>codestring</i>)
+
+<p>
+    Function to normalize the given code.
+</p>
+<dl>
+
+<dt><i>codestring</i> (str)</dt>
+<dd>
+code to be normalized
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+normalized code
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="worker" ID="worker"></a>
+<h2>worker</h2>
+<b>worker</b>(<i>inputQueue, outputQueue</i>)
+
+<p>
+    Module function acting as the parallel worker for the syntax check.
+</p>
+<dl>
+
+<dt><i>inputQueue</i> (multiprocessing.Queue)</dt>
+<dd>
+input queue
+</dd>
+<dt><i>outputQueue</i> (multiprocessing.Queue)</dt>
+<dd>
+output queue
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html	Sun Dec 01 16:38:47 2019 +0100
@@ -0,0 +1,271 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax</h1>
+
+<p>
+Module implementing the syntax check for YAML.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#__yamlSyntaxCheck">__yamlSyntaxCheck</a></td>
+<td>Function to check a YAML source file for syntax errors.</td>
+</tr>
+<tr>
+<td><a href="#initBatchService">initBatchService</a></td>
+<td>Initialize the batch service and return the entry point.</td>
+</tr>
+<tr>
+<td><a href="#initService">initService</a></td>
+<td>Initialize the service and return the entry point.</td>
+</tr>
+<tr>
+<td><a href="#normalizeCode">normalizeCode</a></td>
+<td>Function to normalize the given code.</td>
+</tr>
+<tr>
+<td><a href="#worker">worker</a></td>
+<td>Module function acting as the parallel worker for the syntax check.</td>
+</tr>
+<tr>
+<td><a href="#yamlSyntaxBatchCheck">yamlSyntaxBatchCheck</a></td>
+<td>Module function to check syntax for a batch of files.</td>
+</tr>
+<tr>
+<td><a href="#yamlSyntaxCheck">yamlSyntaxCheck</a></td>
+<td>Function to check a YAML source file for syntax errors.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="__yamlSyntaxCheck" ID="__yamlSyntaxCheck"></a>
+<h2>__yamlSyntaxCheck</h2>
+<b>__yamlSyntaxCheck</b>(<i>file, codestring</i>)
+
+<p>
+    Function to check a YAML source file for syntax errors.
+</p>
+<dl>
+
+<dt><i>file</i> (str)</dt>
+<dd>
+source filename
+</dd>
+<dt><i>codestring</i> (str)</dt>
+<dd>
+string containing the code to check
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="initBatchService" ID="initBatchService"></a>
+<h2>initBatchService</h2>
+<b>initBatchService</b>(<i></i>)
+
+<p>
+    Initialize the batch service and return the entry point.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+the entry point for the background client
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+func
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="initService" ID="initService"></a>
+<h2>initService</h2>
+<b>initService</b>(<i></i>)
+
+<p>
+    Initialize the service and return the entry point.
+</p>
+<dl>
+<dt>Returns:</dt>
+<dd>
+the entry point for the background client
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+func
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="normalizeCode" ID="normalizeCode"></a>
+<h2>normalizeCode</h2>
+<b>normalizeCode</b>(<i>codestring</i>)
+
+<p>
+    Function to normalize the given code.
+</p>
+<dl>
+
+<dt><i>codestring</i> (str)</dt>
+<dd>
+code to be normalized
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+normalized code
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="worker" ID="worker"></a>
+<h2>worker</h2>
+<b>worker</b>(<i>inputQueue, outputQueue</i>)
+
+<p>
+    Module function acting as the parallel worker for the syntax check.
+</p>
+<dl>
+
+<dt><i>inputQueue</i> (multiprocessing.Queue)</dt>
+<dd>
+input queue
+</dd>
+<dt><i>outputQueue</i> (multiprocessing.Queue)</dt>
+<dd>
+output queue
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="yamlSyntaxBatchCheck" ID="yamlSyntaxBatchCheck"></a>
+<h2>yamlSyntaxBatchCheck</h2>
+<b>yamlSyntaxBatchCheck</b>(<i>argumentsList, send, fx, cancelled, maxProcesses=0</i>)
+
+<p>
+    Module function to check syntax for a batch of files.
+</p>
+<dl>
+
+<dt><i>argumentsList</i> (list)</dt>
+<dd>
+list of arguments tuples as given for yamlSyntaxCheck
+</dd>
+<dt><i>send</i> (func)</dt>
+<dd>
+reference to send function
+</dd>
+<dt><i>fx</i> (str)</dt>
+<dd>
+registered service name
+</dd>
+<dt><i>cancelled</i> (func)</dt>
+<dd>
+reference to function checking for a cancellation
+</dd>
+<dt><i>maxProcesses</i> (int)</dt>
+<dd>
+number of processes to be used
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="yamlSyntaxCheck" ID="yamlSyntaxCheck"></a>
+<h2>yamlSyntaxCheck</h2>
+<b>yamlSyntaxCheck</b>(<i>file, codestring</i>)
+
+<p>
+    Function to check a YAML source file for syntax errors.
+</p>
+<dl>
+
+<dt><i>file</i> (str)</dt>
+<dd>
+source filename
+</dd>
+<dt><i>codestring</i> (str)</dt>
+<dd>
+string containing the code to check
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.Plugins.CheckerPlugins.SyntaxChecker.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/index-eric6.Plugins.CheckerPlugins.SyntaxChecker.html	Sun Dec 01 16:38:47 2019 +0100
@@ -43,7 +43,15 @@
 </tr>
 <tr>
 <td><a href="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html">jsCheckSyntax</a></td>
-<td>Module implementing the syntax check for Python 2/3.</td>
+<td>Module implementing the syntax check for JavaScript.</td>
+</tr>
+<tr>
+<td><a href="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html">jsonCheckSyntax</a></td>
+<td>Module implementing the syntax check for JSON.</td>
+</tr>
+<tr>
+<td><a href="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html">yamlCheckSyntax</a></td>
+<td>Module implementing the syntax check for YAML.</td>
 </tr>
 </table>
 </body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/install.html	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Documentation/Source/install.html	Sun Dec 01 16:38:47 2019 +0100
@@ -28,7 +28,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>BlackLists</td></tr><tr><td>PlatformsBlackLists</td></tr><tr><td>apisDir</td></tr><tr><td>cfg</td></tr><tr><td>configLength</td></tr><tr><td>configName</td></tr><tr><td>currDir</td></tr><tr><td>defaultMacAppBundleName</td></tr><tr><td>defaultMacAppBundlePath</td></tr><tr><td>defaultMacPythonExe</td></tr><tr><td>distDir</td></tr><tr><td>doCleanDesktopLinks</td></tr><tr><td>doCleanup</td></tr><tr><td>doCompile</td></tr><tr><td>eric6SourceDir</td></tr><tr><td>forceCleanDesktopLinks</td></tr><tr><td>installApis</td></tr><tr><td>macAppBundleName</td></tr><tr><td>macAppBundlePath</td></tr><tr><td>macPythonExe</td></tr><tr><td>modDir</td></tr><tr><td>platBinDir</td></tr><tr><td>platBinDirOld</td></tr><tr><td>progLanguages</td></tr><tr><td>progName</td></tr><tr><td>pyModDir</td></tr><tr><td>sourceDir</td></tr>
+<tr><td>BlackLists</td></tr><tr><td>PlatformsBlackLists</td></tr><tr><td>apisDir</td></tr><tr><td>cfg</td></tr><tr><td>configLength</td></tr><tr><td>configName</td></tr><tr><td>currDir</td></tr><tr><td>defaultMacAppBundleName</td></tr><tr><td>defaultMacAppBundlePath</td></tr><tr><td>defaultMacPythonExe</td></tr><tr><td>distDir</td></tr><tr><td>doCleanDesktopLinks</td></tr><tr><td>doCleanup</td></tr><tr><td>doCompile</td></tr><tr><td>eric6SourceDir</td></tr><tr><td>forceCleanDesktopLinks</td></tr><tr><td>installApis</td></tr><tr><td>macAppBundleName</td></tr><tr><td>macAppBundlePath</td></tr><tr><td>macPythonExe</td></tr><tr><td>modDir</td></tr><tr><td>platBinDir</td></tr><tr><td>platBinDirOld</td></tr><tr><td>progLanguages</td></tr><tr><td>progName</td></tr><tr><td>pyModDir</td></tr><tr><td>sourceDir</td></tr><tr><td>yes2All</td></tr>
 </table>
 <h3>Classes</h3>
 
--- a/eric6/MicroPython/CircuitPythonDevices.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/MicroPython/CircuitPythonDevices.py	Sun Dec 01 16:38:47 2019 +0100
@@ -244,3 +244,12 @@
         @rtype str
         """
         return Preferences.getMicroPython("CircuitPythonDocuUrl")
+    
+    def getFirmwareUrl(self):
+        """
+        Public method to get the device firmware download URL.
+        
+        @return firmware download URL of the device
+        @rtype str
+        """
+        return Preferences.getMicroPython("CircuitPythonFirmwareUrl")
--- a/eric6/MicroPython/EspDevices.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/MicroPython/EspDevices.py	Sun Dec 01 16:38:47 2019 +0100
@@ -24,6 +24,16 @@
 import Preferences
 
 
+# TODO: add backupFlash: python ./esptool.py --port /dev/ttyUSB4 --baud 115200 read_flash 0x00000 0x400000 backup.img
+#       selection of sizes: 1MB, 2MB, 4MB, 8MB, 16M (0x100000, 0x200000, 0x400000, 0x800000, 0x1000000)
+#       ESP8266: 256KB, 512KB (0x40000, 0x80000)
+# TODO: add restoreFlash: python esptool.py --port /dev/ttyUSB4 write_flash --flash_mode qio 0x00000 backup.img
+#       alternative modes for --flash_mode: qio,qout,dio,dout
+#       optional: --flash_size 1MB, 2MB, 4MB, 8MB, 16M (ESP8266 zusätzlich 256KB, 512KB)
+# TODO: add showChipID: python esptool.py  --port /dev/ttyUSB4  --baud 115200 chip_id
+# TODO: add showFlashID: python esptool.py  --port /dev/ttyUSB4  --baud 115200 flash_id
+# TODO: add readMAC: python esptool.py  --port /dev/ttyUSB4  --baud 115200 read_mac
+
 class EspDevice(MicroPythonDevice):
     """
     Class implementing the device for ESP32 and ESP8266 based boards.
@@ -246,3 +256,12 @@
         @rtype str
         """
         return Preferences.getMicroPython("MicroPythonDocuUrl")
+    
+    def getFirmwareUrl(self):
+        """
+        Public method to get the device firmware download URL.
+        
+        @return firmware download URL of the device
+        @rtype str
+        """
+        return Preferences.getMicroPython("MicroPythonFirmwareUrl")
--- a/eric6/MicroPython/MicroPythonDevices.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/MicroPython/MicroPythonDevices.py	Sun Dec 01 16:38:47 2019 +0100
@@ -368,3 +368,22 @@
         @rtype str
         """
         return ""
+    
+    def hasFirmwareUrl(self):
+        """
+        Public method to check, if the device has a configured firmware
+        download URL.
+        
+        @return flag indicating a configured firmware download URL
+        @rtype bool
+        """
+        return bool(self.getFirmwareUrl())
+    
+    def getFirmwareUrl(self):
+        """
+        Public method to get the device firmware download URL.
+        
+        @return firmware download URL of the device
+        @rtype str
+        """
+        return ""
--- a/eric6/MicroPython/MicroPythonWidget.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/MicroPython/MicroPythonWidget.py	Sun Dec 01 16:38:47 2019 +0100
@@ -1109,7 +1109,10 @@
             act.setEnabled(self.__connected)
         self.__superMenu.addAction(
             self.tr("Show Local Time"), self.__showLocalTime)
-        # TODO: add entry to show local and device time side-by-side
+        if hasTime:
+            act = self.__superMenu.addAction(
+                self.tr("Show Time"), self.__showLocalAndDeviceTime)
+            act.setEnabled(self.__connected)
         self.__superMenu.addSeparator()
         if not Globals.isWindowsPlatform():
             available = self.__mpyCrossAvailable()
@@ -1125,6 +1128,10 @@
             self.__device.addDeviceMenuEntries(self.__superMenu)
             self.__superMenu.addSeparator()
             act = self.__superMenu.addAction(
+                self.tr("Download Firmware"), self.__downloadFirmware)
+            act.setEnabled(self.__device.hasFirmwareUrl())
+            self.__superMenu.addSeparator()
+            act = self.__superMenu.addAction(
                 self.tr("Show Documentation"), self.__showDocumentation)
             act.setEnabled(self.__device.hasDocumentationUrl())
         self.__superMenu.addSeparator()
@@ -1255,7 +1262,7 @@
         Private slot to show the local date and time.
         """
         localdatetime = time.localtime()
-        loacldate = time.strftime('%Y-%m-%d', localdatetime)
+        localdate = time.strftime('%Y-%m-%d', localdatetime)
         localtime = time.strftime('%H:%M:%S', localdatetime)
         E5MessageBox.information(
             self,
@@ -1265,9 +1272,56 @@
                     "<tr><td><b>Date</b></td><td>{0}</td></tr>"
                     "<tr><td><b>Time</b></td><td>{1}</td></tr>"
                     "</table>"
-                    ).format(loacldate, localtime)
+                    ).format(localdate, localtime)
         )
     
+    @pyqtSlot()
+    def __showLocalAndDeviceTime(self):
+        """
+        Private slot to show the local and device time side-by-side.
+        """
+        localdatetime = time.localtime()
+        localdate = time.strftime('%Y-%m-%d', localdatetime)
+        localtime = time.strftime('%H:%M:%S', localdatetime)
+        
+        try:
+            deviceDateTimeString = self.__interface.getTime()
+            try:
+                devicedate, devicetime = (
+                    deviceDateTimeString.strip().split(None, 1)
+                )
+                E5MessageBox.information(
+                    self,
+                    self.tr("Date and Time"),
+                    self.tr("<table>"
+                            "<tr><th></th><th>Local Date and Time</th>"
+                            "<th>Device Date and Time</th></tr>"
+                            "<tr><td><b>Date</b></td>"
+                            "<td align='center'>{0}</td>"
+                            "<td align='center'>{2}</td></tr>"
+                            "<tr><td><b>Time</b></td>"
+                            "<td align='center'>{1}</td>"
+                            "<td align='center'>{3}</td></tr>"
+                            "</table>"
+                            ).format(localdate, localtime,
+                                     devicedate, devicetime)
+                )
+            except ValueError:
+                E5MessageBox.information(
+                    self,
+                    self.tr("Date and Time"),
+                    self.tr("<table>"
+                            "<tr><th>Local Date and Time</th>"
+                            "<th>Device Date and Time</th></tr>"
+                            "<tr><td align='center'>{0} {1}</td>"
+                            "<td align='center'>{2}</td></tr>"
+                            "</table>"
+                            ).format(localdate, localtime,
+                                     deviceDateTimeString.strip())
+                )
+        except Exception as exc:
+            self.__showError("getTime()", str(exc))
+    
     def __showError(self, method, error):
         """
         Private method to show some error message.
@@ -1402,6 +1456,18 @@
         e5App().getObject("UserInterface").launchHelpViewer(url)
     
     @pyqtSlot()
+    def __downloadFirmware(self):
+        """
+        Private slot to open the firmware download page.
+        """
+        if self.__device is None or not self.__device.hasFirmwareUrl():
+            # abort silently
+            return
+        
+        url = self.__device.getFirmwareUrl()
+        e5App().getObject("UserInterface").launchHelpViewer(url)
+    
+    @pyqtSlot()
     def __configure(self):
         """
         Private slot to open the MicroPython configuration page.
--- a/eric6/MicroPython/MicrobitDevices.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/MicroPython/MicrobitDevices.py	Sun Dec 01 16:38:47 2019 +0100
@@ -299,3 +299,12 @@
         @rtype str
         """
         return Preferences.getMicroPython("MicrobitDocuUrl")
+    
+    def getFirmwareUrl(self):
+        """
+        Public method to get the device firmware download URL.
+        
+        @return firmware download URL of the device
+        @rtype str
+        """
+        return Preferences.getMicroPython("MicrobitFirmwareUrl")
--- a/eric6/MicroPython/PyBoardDevices.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/MicroPython/PyBoardDevices.py	Sun Dec 01 16:38:47 2019 +0100
@@ -7,8 +7,13 @@
 Module implementing the device interface class for PyBoard boards.
 """
 
-from E5Gui import E5MessageBox
+import os
+
+from PyQt5.QtCore import pyqtSlot, QStandardPaths
+
+from E5Gui import E5MessageBox, E5FileDialog
 from E5Gui.E5Application import e5App
+from E5Gui.E5ProcessDialog import E5ProcessDialog
 
 from .MicroPythonDevices import MicroPythonDevice
 from .MicroPythonWidget import HAS_QTCHART
@@ -175,7 +180,16 @@
         @rtype str
         """
         return Preferences.getMicroPython("MicroPythonDocuUrl")
-    
+        
+    def getFirmwareUrl(self):
+        """
+        Public method to get the device firmware download URL.
+        
+        @return firmware download URL of the device
+        @rtype str
+        """
+        return Preferences.getMicroPython("MicroPythonFirmwareUrl")
+
     def addDeviceMenuEntries(self, menu):
         """
         Public method to add device specific entries to the given menu.
@@ -183,15 +197,167 @@
         @param menu reference to the context menu
         @type QMenu
         """
-        menu.addAction(
-            self.tr("MicroPython Install Instructions"),
-            self.__showInstallInstructions)
-        # TODO: add entry to flash a new firmware using dfu-util
+        connected = self.microPython.isConnected()
+        
+        act = menu.addAction(self.tr("List DFU-capable Devices"),
+                             self.__listDfuCapableDevices)
+        act.setEnabled(not connected)
+        act = menu.addAction(self.tr("Flash MicroPython Firmware"),
+                             self.__flashMicroPython)
+        act.setEnabled(not connected)
+        menu.addSeparator()
+        menu.addAction(self.tr("MicroPython Flash Instructions"),
+                       self.__showFlashInstructions)
     
-    def __showInstallInstructions(self):
+    @pyqtSlot()
+    def __showFlashInstructions(self):
         """
         Private slot to open the URL containing instructions for installing
         MicroPython on the pyboard.
         """
         e5App().getObject("UserInterface").launchHelpViewer(
             PyBoardDevice.FlashInstructionsURL)
+    
+    def __dfuUtilAvailable(self):
+        """
+        Private method to check the availability of dfu-util.
+        
+        @return flag indicating the availability of dfu-util
+        @rtype bool
+        """
+        available = False
+        program = Preferences.getMicroPython("DfuUtilPath")
+        if not program:
+            program = "dfu-util"
+            if Utilities.isinpath(program):
+                available = True
+        else:
+            if Utilities.isExecutable(program):
+                available = True
+        
+        if not available:
+            E5MessageBox.critical(
+                self.microPython,
+                self.tr("dfu-util not available"),
+                self.tr("""The dfu-util firmware flashing tool"""
+                        """ <b>dfu-util</b> cannot be found or is not"""
+                        """ executable. Ensure it is in the search path"""
+                        """ or configure it on the MicroPython"""
+                        """ configuration page.""")
+            )
+        
+        return available
+    
+    def __showDfuEnableInstructions(self, flash=True):
+        """
+        Private method to show some instructions to enable the DFU mode.
+        
+        @param flash flag indicating to show a warning message for flashing
+        @type bool
+        @return flag indicating OK to continue or abort
+        @rtype bool
+        """
+        msg = self.tr(
+            "<h3>Enable DFU Mode</h3>"
+            "<p>1. Disconnect everything from your board</p>"
+            "<p>2. Disconnect your board</p>"
+            "<p>3. Connect the DFU/BOOT0 pin with a 3.3V pin</p>"
+            "<p>4. Re-connect your board</p>"
+            "<hr />"
+        )
+        
+        if flash:
+            msg += self.tr(
+                "<p><b>Warning:</b> Make sure that all other DFU capable"
+                " devices except your PyBoard are disconnected."
+                "<hr />"
+            )
+        
+        msg += self.tr(
+            "<p>Press <b>OK</b> to continue...</p>"
+        )
+        res = E5MessageBox.information(
+            self.microPython,
+            self.tr("Enable DFU mode"),
+            msg,
+            E5MessageBox.StandardButtons(
+                E5MessageBox.Abort |
+                E5MessageBox.Ok))
+        
+        return res == E5MessageBox.Ok
+    
+    def __showDfuDisableInstructions(self):
+        """
+        Private method to show some instructions to disable the DFU mode.
+        """
+        msg = self.tr(
+            "<h3>Disable DFU Mode</h3>"
+            "<p>1. Disconnect your board</p>"
+            "<p>2. Remove the DFU jumper</p>"
+            "<p>3. Re-connect your board</p>"
+            "<hr />"
+            "<p>Press <b>OK</b> to continue...</p>"
+        )
+        E5MessageBox.information(
+            self.microPython,
+            self.tr("Disable DFU mode"),
+            msg
+        )
+    
+    @pyqtSlot()
+    def __listDfuCapableDevices(self):
+        """
+        Private slot to list all DFU-capable devices.
+        """
+        if self.__dfuUtilAvailable():
+            ok2continue = self.__showDfuEnableInstructions(flash=False)
+            if ok2continue:
+                program = Preferences.getMicroPython("DfuUtilPath")
+                if not program:
+                    program = "dfu-util"
+                
+                args = [
+                    "--list",
+                ]
+                dlg = E5ProcessDialog(
+                    self.tr("'dfu-util' Output"),
+                    self.tr("List DFU capable Devices")
+                )
+                res = dlg.startProcess(program, args)
+                if res:
+                    dlg.exec_()
+    
+    @pyqtSlot()
+    def __flashMicroPython(self):
+        """
+        Private slot to flash a MicroPython firmware.
+        """
+        if self.__dfuUtilAvailable():
+            ok2continue = self.__showDfuEnableInstructions()
+            if ok2continue:
+                program = Preferences.getMicroPython("DfuUtilPath")
+                if not program:
+                    program = "dfu-util"
+                
+                downloadsPath = QStandardPaths.standardLocations(
+                    QStandardPaths.DownloadLocation)[0]
+                firmware = E5FileDialog.getOpenFileName(
+                    self.microPython,
+                    self.tr("Flash MicroPython Firmware"),
+                    downloadsPath,
+                    self.tr(
+                        "MicroPython Firmware Files (*.dfu);;All Files (*)")
+                )
+                if firmware and os.path.exists(firmware):
+                    args = [
+                        "--alt", "0",
+                        "--download", firmware,
+                    ]
+                    dlg = E5ProcessDialog(
+                        self.tr("'dfu-util' Output"),
+                        self.tr("Flash MicroPython Firmware")
+                    )
+                    res = dlg.startProcess(program, args)
+                    if res:
+                        dlg.exec_()
+                        self.__showDfuDisableInstructions()
--- a/eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py	Sun Dec 01 16:38:47 2019 +0100
@@ -2,7 +2,6 @@
 
 # Copyright (c) 2011 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
 #
-# pylint: disable=C0103
 
 """
 Module implementing the syntax check for Python 2/3.
@@ -202,7 +201,7 @@
 
 def worker(inputQueue, outputQueue):
     """
-    Module function acting as the parallel worker for the style check.
+    Module function acting as the parallel worker for the syntax check.
     
     @param inputQueue input queue (multiprocessing.Queue)
     @param outputQueue output queue (multiprocessing.Queue)
--- a/eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py	Sun Dec 01 16:38:47 2019 +0100
@@ -240,6 +240,38 @@
                 self.__serviceError(self.tr("JavaScript batch check"), msg)
                 self.batchJobDone(fx, lang)
     
+    def serviceErrorYAML(self, fx, lang, fn, msg):
+        """
+        Public method handling service errors for YAML.
+        
+        @param fx service name (string)
+        @param lang language (string)
+        @param fn file name (string)
+        @param msg message text (string)
+        """
+        if fx in ['YAMLSyntax', 'batch_YAMLSyntax']:
+            if fx == 'YAMLSyntax':
+                self.__serviceError(fn, msg)
+            else:
+                self.__serviceError(self.tr("YAML batch check"), msg)
+                self.batchJobDone(fx, lang)
+    
+    def serviceErrorJSON(self, fx, lang, fn, msg):
+        """
+        Public method handling service errors for JSON.
+        
+        @param fx service name (string)
+        @param lang language (string)
+        @param fn file name (string)
+        @param msg message text (string)
+        """
+        if fx in ['JSONSyntax', 'batch_JSONSyntax']:
+            if fx == 'JSONSyntax':
+                self.__serviceError(fn, msg)
+            else:
+                self.__serviceError(self.tr("JSON batch check"), msg)
+                self.batchJobDone(fx, lang)
+    
     def batchJobDone(self, fx, lang):
         """
         Public slot handling the completion of a batch job.
@@ -247,9 +279,13 @@
         @param fx service name (string)
         @param lang language (string)
         """
-        if fx in ['Python2Syntax', 'batch_Python2Syntax',
-                  'Python3Syntax', 'batch_Python3Syntax',
-                  'JavaScriptSyntax', 'batch_JavaScriptSyntax']:
+        if fx in [
+            'Python2Syntax', 'batch_Python2Syntax',
+            'Python3Syntax', 'batch_Python3Syntax',
+            'JavaScriptSyntax', 'batch_JavaScriptSyntax',
+            'YAMLSyntax', 'batch_YAMLSyntax',
+            'JSONSyntax', 'batch_JSONSyntax',
+        ]:
             if lang in self.queuedBatches:
                 self.queuedBatches.remove(lang)
             # prevent sending the signal multiple times
--- a/eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Sun Dec 01 16:38:47 2019 +0100
@@ -2,19 +2,12 @@
 
 # Copyright (c) 2014 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
 #
-# pylint: disable=C0103
 
 """
-Module implementing the syntax check for Python 2/3.
+Module implementing the syntax check for JavaScript.
 """
 
-from __future__ import unicode_literals
-
-try:  # Only for Py2
-    import Queue as queue
-except ImportError:
-    import queue
-
+import queue
 import os
 import sys
 import multiprocessing
@@ -144,7 +137,7 @@
 
 def worker(inputQueue, outputQueue):
     """
-    Module function acting as the parallel worker for the style check.
+    Module function acting as the parallel worker for the syntax check.
     
     @param inputQueue input queue (multiprocessing.Queue)
     @param outputQueue output queue (multiprocessing.Queue)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/jsonCheckSyntax.py	Sun Dec 01 16:38:47 2019 +0100
@@ -0,0 +1,183 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the syntax check for JSON.
+"""
+
+import queue
+import multiprocessing
+
+
+def initService():
+    """
+    Initialize the service and return the entry point.
+    
+    @return the entry point for the background client
+    @rtype func
+    """
+    return jsonSyntaxCheck
+
+
+def initBatchService():
+    """
+    Initialize the batch service and return the entry point.
+    
+    @return the entry point for the background client
+    @rtype func
+    """
+    return jsonSyntaxBatchCheck
+
+
+def normalizeCode(codestring):
+    """
+    Function to normalize the given code.
+    
+    @param codestring code to be normalized
+    @type str
+    @return normalized code
+    @rtype str
+    """
+    codestring = codestring.replace("\r\n", "\n").replace("\r", "\n")
+
+    if codestring and codestring[-1] != '\n':
+        codestring = codestring + '\n'
+    
+    return codestring
+
+
+def jsonSyntaxCheck(file, codestring):
+    """
+    Function to check a JSON source file for syntax errors.
+    
+    @param file source filename
+    @type str
+    @param codestring string containing the code to check
+    @type str
+    @return dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+    @rtype dict
+    """
+    return __jsonSyntaxCheck(file, codestring)
+
+
+def jsonSyntaxBatchCheck(argumentsList, send, fx, cancelled, maxProcesses=0):
+    """
+    Module function to check syntax for a batch of files.
+    
+    @param argumentsList list of arguments tuples as given for yamlSyntaxCheck
+    @type list
+    @param send reference to send function
+    @type func
+    @param fx registered service name
+    @type str
+    @param cancelled reference to function checking for a cancellation
+    @type func
+    @param maxProcesses number of processes to be used
+    @type int
+    """
+    if maxProcesses == 0:
+        # determine based on CPU count
+        try:
+            NumberOfProcesses = multiprocessing.cpu_count()
+            if NumberOfProcesses >= 1:
+                NumberOfProcesses -= 1
+        except NotImplementedError:
+            NumberOfProcesses = 1
+    else:
+        NumberOfProcesses = maxProcesses
+
+    # Create queues
+    taskQueue = multiprocessing.Queue()
+    doneQueue = multiprocessing.Queue()
+
+    # Submit tasks (initially two time number of processes
+    initialTasks = 2 * NumberOfProcesses
+    for task in argumentsList[:initialTasks]:
+        taskQueue.put(task)
+
+    # Start worker processes
+    for _ in range(NumberOfProcesses):
+        multiprocessing.Process(
+            target=worker, args=(taskQueue, doneQueue)
+        ).start()
+
+    # Get and send results
+    endIndex = len(argumentsList) - initialTasks
+    for i in range(len(argumentsList)):
+        resultSent = False
+        wasCancelled = False
+        
+        while not resultSent:
+            try:
+                # get result (waiting max. 3 seconds and send it to frontend
+                filename, result = doneQueue.get()
+                send(fx, filename, result)
+                resultSent = True
+            except queue.Empty:
+                # ignore empty queue, just carry on
+                if cancelled():
+                    wasCancelled = True
+                    break
+        
+        if wasCancelled or cancelled():
+            # just exit the loop ignoring the results of queued tasks
+            break
+        
+        if i < endIndex:
+            taskQueue.put(argumentsList[i + initialTasks])
+
+    # Tell child processes to stop
+    for _ in range(NumberOfProcesses):
+        taskQueue.put('STOP')
+
+
+def worker(inputQueue, outputQueue):
+    """
+    Module function acting as the parallel worker for the syntax check.
+    
+    @param inputQueue input queue
+    @type multiprocessing.Queue
+    @param outputQueue output queue
+    @type multiprocessing.Queue
+    """
+    for filename, args in iter(inputQueue.get, 'STOP'):
+        source = args[0]
+        result = __jsonSyntaxCheck(filename, source)
+        outputQueue.put((filename, result))
+
+
+def __jsonSyntaxCheck(file, codestring):
+    """
+    Function to check a YAML source file for syntax errors.
+    
+    @param file source filename
+    @type str
+    @param codestring string containing the code to check
+    @type str
+    @return dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+    @rtype dict
+    """
+    import json
+    
+    codestring = normalizeCode(codestring)
+    
+    try:
+        json.loads(codestring)
+    except json.JSONDecodeError as exc:
+        line = exc.lineno
+        column = exc.colno
+        error = exc.msg
+        
+        cline = min(len(codestring.splitlines()), int(line)) - 1
+        code = codestring.splitlines()[cline]
+        return [{'error': (file, line, column, code, error)}]
+    
+    return [{}]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/yamlCheckSyntax.py	Sun Dec 01 16:38:47 2019 +0100
@@ -0,0 +1,191 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the syntax check for YAML.
+"""
+
+import queue
+import multiprocessing
+
+
+def initService():
+    """
+    Initialize the service and return the entry point.
+    
+    @return the entry point for the background client
+    @rtype func
+    """
+    return yamlSyntaxCheck
+
+
+def initBatchService():
+    """
+    Initialize the batch service and return the entry point.
+    
+    @return the entry point for the background client
+    @rtype func
+    """
+    return yamlSyntaxBatchCheck
+
+
+def normalizeCode(codestring):
+    """
+    Function to normalize the given code.
+    
+    @param codestring code to be normalized
+    @type str
+    @return normalized code
+    @rtype str
+    """
+    codestring = codestring.replace("\r\n", "\n").replace("\r", "\n")
+
+    if codestring and codestring[-1] != '\n':
+        codestring = codestring + '\n'
+    
+    return codestring
+
+
+def yamlSyntaxCheck(file, codestring):
+    """
+    Function to check a YAML source file for syntax errors.
+    
+    @param file source filename
+    @type str
+    @param codestring string containing the code to check
+    @type str
+    @return dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+    @rtype dict
+    """
+    return __yamlSyntaxCheck(file, codestring)
+
+
+def yamlSyntaxBatchCheck(argumentsList, send, fx, cancelled, maxProcesses=0):
+    """
+    Module function to check syntax for a batch of files.
+    
+    @param argumentsList list of arguments tuples as given for yamlSyntaxCheck
+    @type list
+    @param send reference to send function
+    @type func
+    @param fx registered service name
+    @type str
+    @param cancelled reference to function checking for a cancellation
+    @type func
+    @param maxProcesses number of processes to be used
+    @type int
+    """
+    if maxProcesses == 0:
+        # determine based on CPU count
+        try:
+            NumberOfProcesses = multiprocessing.cpu_count()
+            if NumberOfProcesses >= 1:
+                NumberOfProcesses -= 1
+        except NotImplementedError:
+            NumberOfProcesses = 1
+    else:
+        NumberOfProcesses = maxProcesses
+
+    # Create queues
+    taskQueue = multiprocessing.Queue()
+    doneQueue = multiprocessing.Queue()
+
+    # Submit tasks (initially two time number of processes
+    initialTasks = 2 * NumberOfProcesses
+    for task in argumentsList[:initialTasks]:
+        taskQueue.put(task)
+
+    # Start worker processes
+    for _ in range(NumberOfProcesses):
+        multiprocessing.Process(
+            target=worker, args=(taskQueue, doneQueue)
+        ).start()
+
+    # Get and send results
+    endIndex = len(argumentsList) - initialTasks
+    for i in range(len(argumentsList)):
+        resultSent = False
+        wasCancelled = False
+        
+        while not resultSent:
+            try:
+                # get result (waiting max. 3 seconds and send it to frontend
+                filename, result = doneQueue.get()
+                send(fx, filename, result)
+                resultSent = True
+            except queue.Empty:
+                # ignore empty queue, just carry on
+                if cancelled():
+                    wasCancelled = True
+                    break
+        
+        if wasCancelled or cancelled():
+            # just exit the loop ignoring the results of queued tasks
+            break
+        
+        if i < endIndex:
+            taskQueue.put(argumentsList[i + initialTasks])
+
+    # Tell child processes to stop
+    for _ in range(NumberOfProcesses):
+        taskQueue.put('STOP')
+
+
+def worker(inputQueue, outputQueue):
+    """
+    Module function acting as the parallel worker for the syntax check.
+    
+    @param inputQueue input queue
+    @type multiprocessing.Queue
+    @param outputQueue output queue
+    @type multiprocessing.Queue
+    """
+    for filename, args in iter(inputQueue.get, 'STOP'):
+        source = args[0]
+        result = __yamlSyntaxCheck(filename, source)
+        outputQueue.put((filename, result))
+
+
+def __yamlSyntaxCheck(file, codestring):
+    """
+    Function to check a YAML source file for syntax errors.
+    
+    @param file source filename
+    @type str
+    @param codestring string containing the code to check
+    @type str
+    @return dictionary with the keys 'error' and 'warnings' which
+            hold a list containing details about the error/ warnings
+            (file name, line number, column, codestring (only at syntax
+            errors), the message, a list with arguments for the message)
+    @rtype dict
+    """
+    try:
+        from yaml import safe_load_all, MarkedYAMLError
+    except ImportError:
+        error = "pyyaml not available. Install it via the PyPI interface."
+        return [{'error': (file, 0, 0, '', error)}]
+    
+    codestring = normalizeCode(codestring)
+    
+    try:
+        for _obj in safe_load_all(codestring):
+            # do nothing with it, just to get parse errors
+            pass
+    except MarkedYAMLError as exc:
+        if exc.problem_mark:
+            line = exc.problem_mark.line + 1
+            column = exc.problem_mark.column
+        else:
+            line, column = 0, 0
+        error = exc.problem
+        cline = min(len(codestring.splitlines()), int(line)) - 1
+        code = codestring.splitlines()[cline]
+        return [{'error': (file, line, column, code, error)}]
+    
+    return [{}]
--- a/eric6/Plugins/PluginSyntaxChecker.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Plugins/PluginSyntaxChecker.py	Sun Dec 01 16:38:47 2019 +0100
@@ -88,6 +88,26 @@
             lambda fn, problems:
                 self.syntaxCheckService.syntaxChecked.emit(fn, problems),
             self.syntaxCheckService.serviceErrorJavaScript)
+        
+        # YAML syntax check via Python3
+        self.syntaxCheckService.addLanguage(
+            'YAML', 'Python3', path,
+            'yamlCheckSyntax',
+            lambda: [],  # No options
+            lambda: ['.yml', '.yaml'],
+            lambda fn, problems:
+                self.syntaxCheckService.syntaxChecked.emit(fn, problems),
+            self.syntaxCheckService.serviceErrorYAML)
+        
+        # JSON syntax check via Python3
+        self.syntaxCheckService.addLanguage(
+            'JSON', 'Python3', path,
+            'jsonCheckSyntax',
+            lambda: [],  # No options
+            lambda: ['.json'],
+            lambda fn, problems:
+                self.syntaxCheckService.syntaxChecked.emit(fn, problems),
+            self.syntaxCheckService.serviceErrorJSON)
 
     def __initialize(self):
         """
--- a/eric6/Preferences/ConfigurationPages/MicroPythonPage.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Preferences/ConfigurationPages/MicroPythonPage.py	Sun Dec 01 16:38:47 2019 +0100
@@ -38,6 +38,9 @@
         self.mpyCrossPicker.setMode(E5PathPickerModes.OpenFileMode)
         self.mpyCrossPicker.setFilters(self.tr("All Files (*)"))
         
+        self.dfuUtilPathPicker.setMode(E5PathPickerModes.OpenFileMode)
+        self.dfuUtilPathPicker.setFilters(self.tr("All Files (*)"))
+        
         # set initial values
         self.timeoutSpinBox.setValue(
             Preferences.getMicroPython("SerialTimeout") / 1000)
@@ -51,6 +54,14 @@
             Preferences.getMicroPython("ReplLineWrap"))
         self.mpyCrossPicker.setText(
             Preferences.getMicroPython("MpyCrossCompiler"))
+        self.dfuUtilPathPicker.setText(
+            Preferences.getMicroPython("DfuUtilPath"))
+        self.micropythonFirmwareUrlLineEdit.setText(
+            Preferences.getMicroPython("MicroPythonFirmwareUrl"))
+        self.circuitpythonFirmwareUrlLineEdit.setText(
+            Preferences.getMicroPython("CircuitPythonFirmwareUrl"))
+        self.microbitFirmwareUrlLineEdit.setText(
+            Preferences.getMicroPython("MicrobitFirmwareUrl"))
         self.micropythonDocuUrlLineEdit.setText(
             Preferences.getMicroPython("MicroPythonDocuUrl"))
         self.circuitpythonDocuUrlLineEdit.setText(
@@ -63,22 +74,42 @@
         Public slot to save the MicroPython configuration.
         """
         Preferences.setMicroPython(
-            "SerialTimeout", self.timeoutSpinBox.value() * 1000)
+            "SerialTimeout",
+            self.timeoutSpinBox.value() * 1000)
         # converted to milliseconds
         Preferences.setMicroPython(
-            "SyncTimeAfterConnect", self.syncTimeCheckBox.isChecked())
+            "SyncTimeAfterConnect",
+            self.syncTimeCheckBox.isChecked())
+        Preferences.setMicroPython(
+            "ColorScheme",
+            self.colorSchemeComboBox.currentText())
         Preferences.setMicroPython(
-            "ColorScheme", self.colorSchemeComboBox.currentText())
+            "ReplLineWrap",
+            self.replWrapCheckBox.isChecked())
         Preferences.setMicroPython(
-            "ReplLineWrap", self.replWrapCheckBox.isChecked())
+            "MpyCrossCompiler",
+            self.mpyCrossPicker.text())
+        Preferences.setMicroPython(
+            "DfuUtilPath",
+            self.dfuUtilPathPicker.text())
         Preferences.setMicroPython(
-            "MpyCrossCompiler", self.mpyCrossPicker.text())
+            "MicroPythonFirmwareUrl",
+            self.micropythonFirmwareUrlLineEdit.text())
         Preferences.setMicroPython(
-            "MicroPythonDocuUrl", self.micropythonDocuUrlLineEdit.text())
+            "CircuitPythonFirmwareUrl",
+            self.circuitpythonFirmwareUrlLineEdit.text())
+        Preferences.setMicroPython(
+            "MicrobitFirmwareUrl",
+            self.microbitFirmwareUrlLineEdit.text())
         Preferences.setMicroPython(
-            "CircuitPythonDocuUrl", self.circuitpythonDocuUrlLineEdit.text())
+            "MicroPythonDocuUrl",
+            self.micropythonDocuUrlLineEdit.text())
         Preferences.setMicroPython(
-            "MicrobitDocuUrl", self.microbitDocuUrlLineEdit.text())
+            "CircuitPythonDocuUrl",
+            self.circuitpythonDocuUrlLineEdit.text())
+        Preferences.setMicroPython(
+            "MicrobitDocuUrl",
+            self.microbitDocuUrlLineEdit.text())
 
 
 def create(dlg):
--- a/eric6/Preferences/ConfigurationPages/MicroPythonPage.ui	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Preferences/ConfigurationPages/MicroPythonPage.ui	Sun Dec 01 16:38:47 2019 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>476</width>
-    <height>550</height>
+    <height>869</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
@@ -167,6 +167,89 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_5">
+     <property name="title">
+      <string>PyBoard</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>dfu-util Path:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="E5PathPicker" name="dfuUtilPathPicker" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::WheelFocus</enum>
+        </property>
+        <property name="toolTip">
+         <string>Enter the path of the dfu-util flashing executable</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_6">
+     <property name="title">
+      <string>Firmware</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_4">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_8">
+        <property name="text">
+         <string>MicroPython:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="E5ClearableLineEdit" name="micropythonFirmwareUrlLineEdit">
+        <property name="toolTip">
+         <string>Enter the URL for the MicroPython firmware for PyBoard, ESP8266 and ESP32</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_10">
+        <property name="text">
+         <string>CircuitPython:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="E5ClearableLineEdit" name="circuitpythonFirmwareUrlLineEdit">
+        <property name="toolTip">
+         <string>Enter the URL for the CircuitPython firmware</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_9">
+        <property name="text">
+         <string>BBC micro:bit:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="E5ClearableLineEdit" name="microbitFirmwareUrlLineEdit">
+        <property name="toolTip">
+         <string>Enter the URL for the BBC micro:bit Firmware</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="groupBox_4">
      <property name="title">
       <string>Documentation</string>
@@ -251,6 +334,10 @@
   <tabstop>colorSchemeComboBox</tabstop>
   <tabstop>replWrapCheckBox</tabstop>
   <tabstop>mpyCrossPicker</tabstop>
+  <tabstop>dfuUtilPathPicker</tabstop>
+  <tabstop>micropythonFirmwareUrlLineEdit</tabstop>
+  <tabstop>circuitpythonFirmwareUrlLineEdit</tabstop>
+  <tabstop>microbitFirmwareUrlLineEdit</tabstop>
   <tabstop>micropythonDocuUrlLineEdit</tabstop>
   <tabstop>circuitpythonDocuUrlLineEdit</tabstop>
   <tabstop>microbitDocuUrlLineEdit</tabstop>
--- a/eric6/Preferences/ProgramsDialog.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Preferences/ProgramsDialog.py	Sun Dec 01 16:38:47 2019 +0100
@@ -290,6 +290,23 @@
         self.__createEntry(
             self.tr("Source Highlighter - Pygments"), text, version)
         
+        # 10. do the MicroPython related entries
+        exe = Preferences.getMicroPython("MpyCrossCompiler")
+        if not exe:
+            exe = "mpy-cross"
+        self.__createProgramEntry(
+            self.tr("MicroPython - MPY Cross Compiler"), exe, '--version',
+            'MicroPython', 1)
+        self.__createProgramEntry(
+            self.tr("MicroPython - ESP Tool"), sys.executable, 'version',
+            'esptool', -1, exeModule=['-m', 'esptool'])
+        exe = Preferences.getMicroPython("DfuUtilPath")
+        if not exe:
+            exe = "dfu-util"
+        self.__createProgramEntry(
+            self.tr("MicroPython - PyBoard Flasher"), exe, '--version',
+            'dfu-util', -1)
+        
         # 10. do the plugin related programs
         pm = e5App().getObject("PluginManager")
         for info in pm.getPluginExeDisplayData():
--- a/eric6/Preferences/__init__.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Preferences/__init__.py	Sun Dec 01 16:38:47 2019 +0100
@@ -1451,12 +1451,16 @@
         "ShowHiddenLocal": True,
         "ShowHiddenDevice": True,
         "MpyCrossCompiler": "",         # path of the mpy-cross compiler
+        "DfuUtilPath": "",              # path of the dfu-util flashing tool
         "MicroPythonDocuUrl":
             "https://docs.micropython.org/en/latest/",
         "CircuitPythonDocuUrl":
             "https://circuitpython.readthedocs.io/en/latest/",
         "MicrobitDocuUrl":
             "https://microbit-micropython.readthedocs.io/en/latest/",
+        "MicroPythonFirmwareUrl": "http://micropython.org/download",
+        "CircuitPythonFirmwareUrl": "https://circuitpython.org/downloads",
+        "MicrobitFirmwareUrl": "https://microbit.org/guide/firmware/",
     }
     if Globals.isWindowsPlatform():
         microPythonDefaults["ColorScheme"] = "Windows 10"
--- a/eric6/QScintilla/Editor.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/QScintilla/Editor.py	Sun Dec 01 16:38:47 2019 +0100
@@ -1697,7 +1697,7 @@
         @type bool
         """
         self.__setSpellingLanguage(language)
-        self.__checkSpellLanguage(language)
+        self.__checkSpellLanguage()
         
         if not self.__inSpellLanguageChanged and propagate:
             self.__inSpellLanguageChanged = True
@@ -1740,7 +1740,7 @@
                     filename, self.text(0), self)
                 language = "Python{0}".format(pyVer)
             if language in ['Python2', 'Python3', 'MicroPython', 'Ruby',
-                            'JavaScript']:
+                            'JavaScript', 'YAML', 'JSON']:
                 self.filetype = language
             else:
                 self.filetype = ""
--- a/eric6/QScintilla/EditorAssembly.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/QScintilla/EditorAssembly.py	Sun Dec 01 16:38:47 2019 +0100
@@ -53,6 +53,8 @@
         self.__layout.addWidget(self.__membersCombo, 0, 2)
         self.__layout.addWidget(self.__editor, 1, 1, 1, -1)
         
+        self.setFocusProxy(self.__editor)
+        
         self.__module = None
         
         self.__globalsCombo.activated[int].connect(self.__globalsActivated)
--- a/eric6/UI/UserInterface.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/UI/UserInterface.py	Sun Dec 01 16:38:47 2019 +0100
@@ -3647,7 +3647,7 @@
             sizeStr = "32-Bit"
         
         versionText = self.tr(
-            """<h3>Version Numbers</h3>"""
+            """<h2>Version Numbers</h2>"""
             """<table>""")
         versionText += (
             """<tr><td><b>Python</b></td><td>{0}, {1}</td></tr>"""
@@ -3658,12 +3658,26 @@
         versionText += (
             """<tr><td><b>PyQt</b></td><td>{0}</td></tr>"""
         ).format(PYQT_VERSION_STR)
+        try:
+            from PyQt5 import QtChart
+            versionText += (
+                """<tr><td><b>PyQtChart</b></td><td>{0}</td></tr>"""
+            ).format(QtChart.PYQT_CHART_VERSION_STR)
+        except (ImportError, AttributeError):
+            pass
+        try:
+            from PyQt5 import QtWebEngine
+            versionText += (
+                """<tr><td><b>PyQtWebEngine</b></td><td>{0}</td></tr>"""
+            ).format(QtWebEngine.PYQT_WEBENGINE_VERSION_STR)
+        except (ImportError, AttributeError):
+            pass
+        versionText += (
+            """<tr><td><b>QScintilla</b></td><td>{0}</td></tr>"""
+        ).format(QSCINTILLA_VERSION_STR)
         versionText += (
             """<tr><td><b>sip</b></td><td>{0}</td></tr>"""
         ).format(sip_version_str)
-        versionText += (
-            """<tr><td><b>QScintilla</b></td><td>{0}</td></tr>"""
-        ).format(QSCINTILLA_VERSION_STR)
         try:
             from WebBrowser.Tools import WebBrowserTools
             chromeVersion = WebBrowserTools.getWebEngineVersions()[0]
--- a/eric6/Utilities/BackgroundService.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Utilities/BackgroundService.py	Sun Dec 01 16:38:47 2019 +0100
@@ -126,7 +126,7 @@
         connection = self.connections.get(lang)
         if connection is None:
             if fx != 'INIT':
-                # Avoid growing recursion deep which could itself result in an
+                # Avoid growing recursion depth which could itself result in an
                 # exception
                 QTimer.singleShot(
                     0,
--- a/eric6/Utilities/__init__.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/Utilities/__init__.py	Sun Dec 01 16:38:47 2019 +0100
@@ -1927,7 +1927,18 @@
         linesep, sys.version.split()[0], sizeStr, linesep)
     info += "  Qt {0}{1}  PyQt {2}{3}".format(
         qVersion(), linesep, PYQT_VERSION_STR, linesep)
-    info += "  sip {0}{1}  QScintilla {2}{3}".format(
+    try:
+        from PyQt5 import QtChart
+        info += "  PyQtChart {0}".format(QtChart.PYQT_CHART_VERSION_STR)
+    except (ImportError, AttributeError):
+        pass
+    try:
+        from PyQt5 import QtWebEngine
+        info += "  PyQtWebEngine {0}".format(
+            QtWebEngine.PYQT_WEBENGINE_VERSION_STR)
+    except (ImportError, AttributeError):
+        pass
+    info += "  QScintilla {2}{3}  sip {0}{1}".format(
         sip_version_str, linesep, QSCINTILLA_VERSION_STR, linesep)
     try:
         from PyQt5 import QtWebEngineWidgets    # __IGNORE_WARNING__
--- a/eric6/ViewManager/ViewManager.py	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/ViewManager/ViewManager.py	Sun Dec 01 16:38:47 2019 +0100
@@ -5436,9 +5436,15 @@
         """
         Public method to handle the global change of focus.
         
-        @param old reference to the widget loosing focus (QWidget)
-        @param now reference to the widget gaining focus (QWidget)
-        """
+        @param old reference to the widget loosing focus
+        @type QWidget
+        @param now reference to the widget gaining focus
+        @type QWidget
+        """
+        # Focus handling was changed with Qt 5.13.1; this copes with that
+        if now is None:
+            return
+        
         from QScintilla.Shell import Shell
         
         if not isinstance(now, (Editor, Shell)):
--- a/eric6/i18n/eric6_cs.ts	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/i18n/eric6_cs.ts	Sun Dec 01 16:38:47 2019 +0100
@@ -46311,43 +46311,78 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="39"/>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="42"/>
         <source>All Files (*)</source>
         <translation type="unfinished">Všechny soubory (*)</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="255"/>
+        <source>Documentation</source>
+        <translation type="unfinished">Dokumentace</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="261"/>
+        <source>MicroPython:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="268"/>
+        <source>Enter the URL for the MicroPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="275"/>
+        <source>CircuitPython:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="282"/>
+        <source>Enter the URL for the CircuitPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="289"/>
+        <source>BBC micro:bit:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="296"/>
+        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="172"/>
-        <source>Documentation</source>
-        <translation type="unfinished">Dokumentace</translation>
+        <source>PyBoard</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="178"/>
-        <source>MicroPython:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="185"/>
-        <source>Enter the URL for the MicroPython documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="192"/>
-        <source>CircuitPython:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="199"/>
-        <source>Enter the URL for the CircuitPython documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="206"/>
-        <source>BBC micro:bit:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="213"/>
-        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <source>dfu-util Path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="194"/>
+        <source>Enter the path of the dfu-util flashing executable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="204"/>
+        <source>Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="217"/>
+        <source>Enter the URL for the MicroPython firmware for PyBoard, ESP8266 and ESP32</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="231"/>
+        <source>Enter the URL for the CircuitPython firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="245"/>
+        <source>Enter the URL for the BBC micro:bit Firmware</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -46545,7 +46580,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>Synchronize Time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -46560,107 +46595,107 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1366"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1421"/>
         <source>Compile Python File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1386"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1441"/>
         <source>Compile Current Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1140"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1148"/>
         <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1149"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1157"/>
         <source>No version information available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1151"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1159"/>
         <source>Device Version Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1174"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1182"/>
         <source>unknown</source>
         <translation type="unfinished">neznámý</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>Device Implementation Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1224"/>
-        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1232"/>
+        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1240"/>
         <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1246"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1254"/>
         <source>Device Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>Local Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>Error handling device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1318"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1373"/>
         <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1336"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1391"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation type="unfinished">Python soubory (*.py);;Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1346"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1401"/>
         <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1356"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1411"/>
         <source>&apos;mpy-cross&apos; Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1379"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1434"/>
         <source>The current editor does not contain a Python file. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -46685,14 +46720,39 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1126"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1134"/>
         <source>Show Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1138"/>
+        <source>Configure</source>
+        <translation type="unfinished">Konfigurovat</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1113"/>
+        <source>Show Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1130"/>
-        <source>Configure</source>
-        <translation type="unfinished">Konfigurovat</translation>
+        <source>Download Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>Date and Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1293"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -52031,17 +52091,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1606"/>
+        <location filename="../Preferences/__init__.py" line="1610"/>
         <source>Export Preferences</source>
         <translation>Předvolby exportu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Import Preferences</source>
         <translation>Předvolby importu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -52384,22 +52444,22 @@
         <translation>CORBA IDL kompilátor</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="361"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="378"/>
         <source>(not configured)</source>
         <translation>(nezkonfigurováno)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="415"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="432"/>
         <source>(not executable)</source>
         <translation>(nevykonavatelný)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="452"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="469"/>
         <source>(not found)</source>
         <translation>(nenalezeno)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="413"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="430"/>
         <source>(unknown)</source>
         <translation>(neznámý)</translation>
     </message>
@@ -52489,7 +52549,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="394"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="411"/>
         <source>(module not found)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -52518,6 +52578,21 @@
         <source>PyPI Package Management</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="297"/>
+        <source>MicroPython - MPY Cross Compiler</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="300"/>
+        <source>MicroPython - ESP Tool</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="306"/>
+        <source>MicroPython - PyBoard Flasher</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Project</name>
@@ -56045,23 +56120,88 @@
 <context>
     <name>PyBoardDevice</name>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="70"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="75"/>
         <source>PyBoard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Python files for PyBoard devices are stored on the device. Therefore, to edit these files you need to have the device plugged in. Until you plug in a device, the standard directory will be used.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="186"/>
-        <source>MicroPython Install Instructions</source>
+        <location filename="../MicroPython/PyBoardDevices.py" line="202"/>
+        <source>List DFU-capable Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>Flash MicroPython Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="209"/>
+        <source>MicroPython Flash Instructions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>dfu-util not available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>The dfu-util firmware flashing tool &lt;b&gt;dfu-util&lt;/b&gt; cannot be found or is not executable. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="260"/>
+        <source>&lt;h3&gt;Enable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect everything from your board&lt;/p&gt;&lt;p&gt;2. Disconnect your board&lt;/p&gt;&lt;p&gt;3. Connect the DFU/BOOT0 pin with a 3.3V pin&lt;/p&gt;&lt;p&gt;4. Re-connect your board&lt;/p&gt;&lt;hr /&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="270"/>
+        <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Make sure that all other DFU capable devices except your PyBoard are disconnected.&lt;hr /&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="276"/>
+        <source>&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="279"/>
+        <source>Enable DFU mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="293"/>
+        <source>&lt;h3&gt;Disable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect your board&lt;/p&gt;&lt;p&gt;2. Remove the DFU jumper&lt;/p&gt;&lt;p&gt;3. Re-connect your board&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="301"/>
+        <source>Disable DFU mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>&apos;dfu-util&apos; Output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="322"/>
+        <source>List DFU capable Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="344"/>
+        <source>MicroPython Firmware Files (*.dfu);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -76996,7 +77136,7 @@
         <translation>Zjistit akt&amp;ualizace...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Report Bug</source>
         <translation>Reportovat Bugy</translation>
     </message>
@@ -77246,7 +77386,7 @@
         <translation>&lt;b&gt;Klávesové zkratky&lt;/b&gt;&lt;p&gt;Nastavení klávesových zkratek aplikace podle zvyklostí uživatele.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6315"/>
+        <location filename="../UI/UserInterface.py" line="6329"/>
         <source>Export Keyboard Shortcuts</source>
         <translation>Exportovat klávesové zkratky</translation>
     </message>
@@ -77266,7 +77406,7 @@
         <translation>&lt;b&gt;Export klávesových zkratek&lt;/b&gt;&lt;p&gt;Exportují se klávesové zkratky z aplikace.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Import Keyboard Shortcuts</source>
         <translation>Import klávesových zkratek</translation>
     </message>
@@ -77391,7 +77531,7 @@
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
+        <location filename="../UI/UserInterface.py" line="5115"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
@@ -77403,30 +77543,30 @@
     <message>
         <location filename="../UI/UserInterface.py" line="3650"/>
         <source>&lt;h3&gt;Version Numbers&lt;/h3&gt;&lt;table&gt;</source>
-        <translation>&lt;h3&gt;Čísla verzí&lt;/h3&gt;&lt;table&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7312"/>
+        <translation type="obsolete">&lt;h3&gt;Čísla verzí&lt;/h3&gt;&lt;table&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="7326"/>
         <source>&lt;/table&gt;</source>
         <translation>&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Email address or mail server address is empty. Please configure your Email settings in the Preferences Dialog.</source>
         <translation>Emailová adresa nebo mail server adresa jsou prázdné. Prosím, nastavte váš email v dialogovém okně Nastavení.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4070"/>
+        <location filename="../UI/UserInterface.py" line="4084"/>
         <source>Configure Tool Groups ...</source>
         <translation>Konfigurace Skupin nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4074"/>
+        <location filename="../UI/UserInterface.py" line="4088"/>
         <source>Configure current Tool Group ...</source>
         <translation>Konfigurace aktuální skupiny nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4025"/>
+        <location filename="../UI/UserInterface.py" line="4039"/>
         <source>&amp;Builtin Tools</source>
         <translation>&amp;Vestavěné nástroje</translation>
     </message>
@@ -77436,62 +77576,62 @@
         <translation type="obsolete">V aktuálním projektu není definován hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>Problem</source>
         <translation>Problém</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
+        <location filename="../UI/UserInterface.py" line="5115"/>
         <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
         <translation>Aktuálně není vybrán žádný prohlížeč. Prosím otevřete Nastavení a nějaký vyberte.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5135"/>
+        <location filename="../UI/UserInterface.py" line="5149"/>
         <source>&lt;p&gt;Could not start the help viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit prohlížeč nápovědy.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>Documentation Missing</source>
         <translation>Dokumentace chybí</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>Documentation</source>
         <translation>Dokumentace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5713"/>
+        <location filename="../UI/UserInterface.py" line="5727"/>
         <source>&lt;p&gt;The PyQt4 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Počátek dokumentace PySide nebyl nastaven.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>Save tasks</source>
         <translation>Uložit úlohy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>Read tasks</source>
         <translation>Načíst úlohy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Error during updates check</source>
         <translation>Chyba během zjišťování aktualizací</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>Update available</source>
         <translation>Byla nalezena aktualizace</translation>
     </message>
@@ -77506,17 +77646,17 @@
         <translation>Zobrazit externí nás&amp;troje</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Could not perform updates check.</source>
         <translation>Kontrolu updatů nelze provést.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>&amp;Cancel</source>
         <translation>&amp;Zrušit</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>First time usage</source>
         <translation>Spuštěno poprvé</translation>
     </message>
@@ -77556,7 +77696,7 @@
         <translation>&amp;Plugin Infa...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4042"/>
+        <location filename="../UI/UserInterface.py" line="4056"/>
         <source>&amp;Plugin Tools</source>
         <translation>&amp;Plugin nástroje</translation>
     </message>
@@ -77576,12 +77716,12 @@
         <translation>&lt;b&gt;Odinstalovat plugin...&lt;/b&gt;&lt;p&gt;Otevře dialog pro odinstalaci pluginu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4190"/>
+        <location filename="../UI/UserInterface.py" line="4204"/>
         <source>&amp;Show all</source>
         <translation>&amp;Zobrazit vše</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4192"/>
+        <location filename="../UI/UserInterface.py" line="4206"/>
         <source>&amp;Hide all</source>
         <translation>&amp;Skrýt vše</translation>
     </message>
@@ -77611,7 +77751,7 @@
         <translation>Zobrazit dostupné verze ke stažení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7297"/>
+        <location filename="../UI/UserInterface.py" line="7311"/>
         <source>&lt;h3&gt;Available versions&lt;/h3&gt;&lt;table&gt;</source>
         <translation>&lt;h3&gt;Dostupné verze&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
@@ -77691,7 +77831,7 @@
         <translation>Obnovit manažer nástrojových lišt...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>External Tools</source>
         <translation>Externí nástroje</translation>
     </message>
@@ -77706,12 +77846,12 @@
         <translation>Prohlížeč &amp;multiprojektu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6634"/>
+        <location filename="../UI/UserInterface.py" line="6648"/>
         <source>Save session</source>
         <translation>Uložit relaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>Read session</source>
         <translation>Načíst relaci</translation>
     </message>
@@ -77781,12 +77921,12 @@
         <translation>&lt;b&gt;Přepnout vodorovnou nástrojovou lištu&lt;/b&gt;&lt;p&gt;Pokud je vodorovná nástrojová lišta skryta, tak se zobrazí. Je-li zobrazena, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>Restart application</source>
         <translation>Restartovat aplikaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>The application needs to be restarted. Do it now?</source>
         <translation>Aplikace potřebuje restartovat. Má se provést nyní?</translation>
     </message>
@@ -77941,7 +78081,7 @@
         <translation>Editor &amp;ikon...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt 3 support</source>
         <translation>Qt 3 podpora</translation>
     </message>
@@ -77981,106 +78121,106 @@
         <translation>Externí nástroje/{0}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist or is zero length.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; neexistuje nebo má nulovou délku.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4948"/>
+        <location filename="../UI/UserInterface.py" line="4962"/>
         <source>&lt;p&gt;Could not start Qt-Designer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Qt-Designer.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5020"/>
+        <location filename="../UI/UserInterface.py" line="5034"/>
         <source>&lt;p&gt;Could not start Qt-Linguist.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Qt-Linguist.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5073"/>
+        <location filename="../UI/UserInterface.py" line="5087"/>
         <source>&lt;p&gt;Could not start Qt-Assistant.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Qt-Assistant.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5115"/>
+        <location filename="../UI/UserInterface.py" line="5129"/>
         <source>&lt;p&gt;Could not start custom viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit aktuální prohlížeč.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5185"/>
+        <location filename="../UI/UserInterface.py" line="5199"/>
         <source>&lt;p&gt;Could not start UI Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit UI Previewer.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5242"/>
+        <location filename="../UI/UserInterface.py" line="5256"/>
         <source>&lt;p&gt;Could not start Translation Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Previewer překladů.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5265"/>
+        <location filename="../UI/UserInterface.py" line="5279"/>
         <source>&lt;p&gt;Could not start SQL Browser.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze spustit SQL Browser.&lt;br&gt;Ujistěte se, že je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5360"/>
+        <location filename="../UI/UserInterface.py" line="5374"/>
         <source>No tool entry found for external tool &apos;{0}&apos; in tool group &apos;{1}&apos;.</source>
         <translation>V externím nástroji  &apos;{0}&apos; ve skupině &apos;{1}&apos; nebyl záznam nástroje nalezen.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>No toolgroup entry &apos;{0}&apos; found.</source>
         <translation>Skupina nástrojů &apos;{0}&apos; nenalezena. </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5408"/>
+        <location filename="../UI/UserInterface.py" line="5422"/>
         <source>Starting process &apos;{0} {1}&apos;.
 </source>
         <translation>Spouštím proces &apos;{0} {1}&apos;.
 </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>&lt;p&gt;Could not start the tool entry &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;Ensure that it is available as &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit příkaz &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{1}&lt;/b&gt;. &lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5502"/>
+        <location filename="../UI/UserInterface.py" line="5516"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
         <translation>Proces &apos;{0}&apos; byl ukončen.
 </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>&lt;p&gt;The documentation starting point &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; could not be found.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Adresář dokumentace &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; nebyl nalezen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru s úlohami &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s úlohami &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6572"/>
+        <location filename="../UI/UserInterface.py" line="6586"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Zápis do souboru relace session &lt;b&gt;{0}&lt;/b&gt; se nezdařil.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor relace session &lt;b&gt;{0}&lt;/b&gt; nelze přečíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7096"/>
+        <location filename="../UI/UserInterface.py" line="7110"/>
         <source>Trying host {0}</source>
         <translation>Zkouším host {0}</translation>
     </message>
@@ -78115,7 +78255,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Keyboard shortcut file (*.e4k)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78155,27 +78295,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>Error getting versions information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7155"/>
+        <location filename="../UI/UserInterface.py" line="7169"/>
         <source>The versions information could not be downloaded. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Open Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Could not start a web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>The versions information could not be downloaded for the last 7 days. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78261,12 +78401,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5337"/>
+        <location filename="../UI/UserInterface.py" line="5351"/>
         <source>&lt;p&gt;Could not start Snapshot tool.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7368"/>
+        <location filename="../UI/UserInterface.py" line="7382"/>
         <source>Select Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78631,7 +78771,7 @@
         <translation type="unfinished">Otevřít PyQt4 dokumentaci {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5775"/>
+        <location filename="../UI/UserInterface.py" line="5789"/>
         <source>&lt;p&gt;The PyQt5 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Adresář PyQt4 dokumentace není nakonfigurován.&lt;/p&gt; {5 ?}</translation>
     </message>
@@ -78641,7 +78781,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>%v/%m</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78661,7 +78801,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7091"/>
+        <location filename="../UI/UserInterface.py" line="7105"/>
         <source>Version Check</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78731,27 +78871,27 @@
         <translation type="unfinished">&lt;b&gt;Eric API dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit Eric API dokumentaci. Umístění dokumentace je v podadresáři Documentation/Source v instalačním adresáři eric5.&lt;/p&gt; {6 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt v.3 is not supported by eric6.</source>
         <translation type="unfinished">Qt v.3 není podporováno v eric5. {3 ?} {6.?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>The update to &lt;b&gt;{0}&lt;/b&gt; of eric6 is available at &lt;b&gt;{1}&lt;/b&gt;. Would you like to get it?</source>
         <translation type="unfinished">Aktualizace &lt;b&gt;{0}&lt;/b&gt; eric5 je připravena na &lt;b&gt;{1}&lt;/b&gt;. Chcete ji stáhnout a nainstalovat? {0}?} {6 ?} {1}?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>Eric6 is up to date</source>
         <translation type="unfinished">Eric5 je aktuální {6 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>You are using the latest version of eric6</source>
         <translation type="unfinished">Používáte poslední verzi eric6</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>eric6 has not been configured yet. The configuration dialog will be started.</source>
         <translation type="unfinished">eric5 nebyl ještě nakonfigurován. Bude spuštěn konfigurační dialog. {6 ?}</translation>
     </message>
@@ -78761,17 +78901,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4045"/>
+        <location filename="../UI/UserInterface.py" line="4059"/>
         <source>&amp;User Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4117"/>
+        <location filename="../UI/UserInterface.py" line="4131"/>
         <source>No User Tools Configured</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7107"/>
+        <location filename="../UI/UserInterface.py" line="7121"/>
         <source>The versions information cannot not be downloaded because you are &lt;b&gt;offline&lt;/b&gt;. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78816,7 +78956,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>Load session</source>
         <translation type="unfinished">Načíst relaci</translation>
     </message>
@@ -78831,17 +78971,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>eric6 Session Files (*.e5s)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>Crash Session found!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>A session file of a crashed session was found. Shall this session be restored?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78856,17 +78996,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>Update Check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>You installed eric directly from the source code. There is no possibility to check for the availability of an update.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7232"/>
+        <location filename="../UI/UserInterface.py" line="7246"/>
         <source>You are using a snapshot release of eric6. A more up-to-date stable release might be available.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78921,7 +79061,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>&lt;p&gt;The PySide{0} documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -78997,17 +79137,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>Start Web Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6001"/>
+        <location filename="../UI/UserInterface.py" line="6015"/>
         <source>The eric6 web browser could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>&lt;p&gt;The eric6 web browser is not started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -79101,6 +79241,11 @@
         <source>Central Park</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3650"/>
+        <source>&lt;h2&gt;Version Numbers&lt;/h2&gt;&lt;table&gt;</source>
+        <translation type="unfinished">&lt;h3&gt;Čísla verzí&lt;/h3&gt;&lt;table&gt; {2&gt;?} {2&gt;?}</translation>
+    </message>
 </context>
 <context>
     <name>UserPropertiesDialog</name>
@@ -79358,7 +79503,7 @@
 <context>
     <name>VariableItem</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="207"/>
+        <location filename="../Debugger/VariablesViewer.py" line="211"/>
         <source>&lt;double click to show value&gt;</source>
         <translation>&lt;dvojitý klik pro zobrazení hodnoty&gt;</translation>
     </message>
@@ -79440,22 +79585,22 @@
 <context>
     <name>VariablesModel</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="278"/>
+        <location filename="../Debugger/VariablesViewer.py" line="282"/>
         <source>Globals</source>
         <translation type="unfinished">Globální</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="280"/>
+        <location filename="../Debugger/VariablesViewer.py" line="284"/>
         <source>Locals</source>
         <translation type="unfinished">Lokální</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Value</source>
         <translation type="unfinished">Hodnota</translation>
     </message>
@@ -79463,7 +79608,7 @@
 <context>
     <name>VariablesViewer</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="951"/>
+        <location filename="../Debugger/VariablesViewer.py" line="955"/>
         <source>Global Variables</source>
         <translation>Globální proměnné</translation>
     </message>
@@ -79483,12 +79628,12 @@
         <translation type="obsolete">Typ</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="952"/>
+        <location filename="../Debugger/VariablesViewer.py" line="956"/>
         <source>&lt;b&gt;The Global Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the global variables of the debugged program.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Prohlížeč globálních proměnných&lt;/b&gt;&lt;p&gt;Toto okno zobrazuje globální proměnné debugovénho programu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="958"/>
+        <location filename="../Debugger/VariablesViewer.py" line="962"/>
         <source>Local Variables</source>
         <translation>Lokální proměnné</translation>
     </message>
@@ -79498,17 +79643,17 @@
         <translation type="obsolete">Lokální</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="959"/>
+        <location filename="../Debugger/VariablesViewer.py" line="963"/>
         <source>&lt;b&gt;The Local Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the local variables of the debugged program.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Prohlížeč lokálních proměnných&lt;/b&gt;&lt;p&gt;Toto okno zobrazuje lokální proměnné debugovénho programu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1076"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
         <source>Show Details...</source>
         <translation>Zobrazit detaily...</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1091"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1095"/>
         <source>Configure...</source>
         <translation>Konfigurovat...</translation>
     </message>
@@ -79518,7 +79663,7 @@
         <translation>{0} položek</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1089"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1093"/>
         <source>Refresh</source>
         <translation type="unfinished">Obnovit</translation>
     </message>
@@ -79528,25 +79673,30 @@
         <translation type="obsolete">Složit vše</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1078"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1082"/>
         <source>Expand</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1079"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1083"/>
         <source>Collapse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1084"/>
         <source>Collapse All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1092"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1096"/>
         <source>Variables Type Filter...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/VariablesViewer.py" line="47"/>
+        <source>unsized</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VcsCommandOptionsDialog</name>
Binary file eric6/i18n/eric6_de.qm has changed
--- a/eric6/i18n/eric6_de.ts	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/i18n/eric6_de.ts	Sun Dec 01 16:38:47 2019 +0100
@@ -44009,44 +44009,79 @@
         <translation>Gib den Pfad für den Crosscompiler ein</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="39"/>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="42"/>
         <source>All Files (*)</source>
         <translation>Alle Dateien (*)</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="255"/>
+        <source>Documentation</source>
+        <translation>Dokumentation</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="261"/>
+        <source>MicroPython:</source>
+        <translation>MicroPython:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="268"/>
+        <source>Enter the URL for the MicroPython documentation</source>
+        <translation>Gib die URL für die MicroPython Dokumentation ein</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="275"/>
+        <source>CircuitPython:</source>
+        <translation>CircuitPython:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="282"/>
+        <source>Enter the URL for the CircuitPython documentation</source>
+        <translation>Gib die URL für die CircuitPython Dokumentation ein</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="289"/>
+        <source>BBC micro:bit:</source>
+        <translation>BBC micro:bit:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="296"/>
+        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <translation>Gib die URL für die BBC micro:bit MicroPython Dokumentation ein</translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="172"/>
-        <source>Documentation</source>
-        <translation>Dokumentation</translation>
+        <source>PyBoard</source>
+        <translation>PyBoard</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="178"/>
-        <source>MicroPython:</source>
-        <translation>MicroPython:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="185"/>
-        <source>Enter the URL for the MicroPython documentation</source>
-        <translation>Gib die URL für die MicroPython Dokumentation ein</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="192"/>
-        <source>CircuitPython:</source>
-        <translation>CircuitPython:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="199"/>
-        <source>Enter the URL for the CircuitPython documentation</source>
-        <translation>Gib die URL für die CircuitPython Dokumentation ein</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="206"/>
-        <source>BBC micro:bit:</source>
-        <translation>BBC micro:bit:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="213"/>
-        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
-        <translation>Gib die URL für die BBC micro:bit MicroPython Dokumentation ein</translation>
+        <source>dfu-util Path:</source>
+        <translation>Pfad zu dfu-util:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="194"/>
+        <source>Enter the path of the dfu-util flashing executable</source>
+        <translation>Gib den Pfad des &apos;dfu-util&apos; Flashing Programms ein</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="204"/>
+        <source>Firmware</source>
+        <translation>Firmware</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="217"/>
+        <source>Enter the URL for the MicroPython firmware for PyBoard, ESP8266 and ESP32</source>
+        <translation>Gib die URL zur MicroPython Firmware für PyBoard, ESP8266 und ESP32 ein</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="231"/>
+        <source>Enter the URL for the CircuitPython firmware</source>
+        <translation>Gib die URL zur CircuitPython Firmware ein</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="245"/>
+        <source>Enter the URL for the BBC micro:bit Firmware</source>
+        <translation>Gib die URL zur BBC micro:bit Firmware ein</translation>
     </message>
 </context>
 <context>
@@ -44246,7 +44281,7 @@
         <translation>Implementierung anzeigen</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>Synchronize Time</source>
         <translation>Zeit synchronisieren</translation>
     </message>
@@ -44261,107 +44296,107 @@
         <translation>Lokale Zeit anzeigen</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1366"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1421"/>
         <source>Compile Python File</source>
         <translation>Python Datei übersetzen</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1386"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1441"/>
         <source>Compile Current Editor</source>
         <translation>Aktuellen Editor übersetzen</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1140"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1148"/>
         <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
         <translation>&lt;h3&gt;Versionsinformationen des Gerätes&lt;/h3&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1149"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1157"/>
         <source>No version information available.</source>
         <translation>Keine Versionsinformationen verfügbar.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1151"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1159"/>
         <source>Device Version Information</source>
         <translation>Versionsinformationen des Gerätes</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1174"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1182"/>
         <source>unknown</source>
         <translation>unbekannt</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>Device Implementation Information</source>
         <translation>Informationen zur Implementierung</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;h3&gt;Informationen zur Implementierung&lt;/h3&gt;&lt;p&gt;Dieses Gerät enthält &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Zeit des angeschlossenen Gerätes wurde mit der lokalen Zeit synchronisiert.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1224"/>
-        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-        <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1232"/>
+        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1240"/>
         <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
         <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1246"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1254"/>
         <source>Device Date and Time</source>
         <translation>Datum und Zeit des Gerätes</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>Local Date and Time</source>
         <translation>Lokales Datum und Zeit</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation>&lt;h3&gt;Lokales Datum und Zeit&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>Error handling device</source>
         <translation>Fehler bei Gerätekommunikation</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Es trat ein Fehler bei der Kommunikation mit dem Gerät auf.&lt;/p&gt;&lt;p&gt;Methode: {0}&lt;/p&gt;&lt;p&gt;Nachricht: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1318"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1373"/>
         <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
         <translation>Der MicroPython Crosscompiler &lt;b&gt;mpy-cross&lt;/b&gt; kann nicht gefunden werden. Stelle sicher, dass er im Suchpfad liegt oder konfiguriere ihn auf der MicroPython Konfigurationsseite.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1336"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1391"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Python-Dateien (*.py);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1346"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1401"/>
         <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
         <translation>Die Python Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht. Abbruch...</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1356"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1411"/>
         <source>&apos;mpy-cross&apos; Output</source>
         <translation>&apos;mpy-cross&apos; Ausgabe</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1379"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1434"/>
         <source>The current editor does not contain a Python file. Aborting...</source>
         <translation>Der aktuelle Editortext enthält keine Pythondatei. Abbruch...</translation>
     </message>
@@ -44386,14 +44421,39 @@
         <translation>µPy Dateien</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1126"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1134"/>
         <source>Show Documentation</source>
         <translation>Dokumentation anzeigen</translation>
     </message>
     <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1138"/>
+        <source>Configure</source>
+        <translation>Einstellungen</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1113"/>
+        <source>Show Time</source>
+        <translation>Zeit anzeigen</translation>
+    </message>
+    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1130"/>
-        <source>Configure</source>
-        <translation>Einstellungen</translation>
+        <source>Download Firmware</source>
+        <translation>Firmware herunterladen</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>Date and Time</source>
+        <translation>Datum und Zeit</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1293"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
 </context>
 <context>
@@ -49642,17 +49702,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1606"/>
+        <location filename="../Preferences/__init__.py" line="1610"/>
         <source>Export Preferences</source>
         <translation>Einstellungen exportieren</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Import Preferences</source>
         <translation>Einstellungen importieren</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
     </message>
@@ -49990,17 +50050,17 @@
         <translation>CORBA IDL Compiler</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="361"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="378"/>
         <source>(not configured)</source>
         <translation>(nicht konfiguriert)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="415"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="432"/>
         <source>(not executable)</source>
         <translation>(nicht ausführbar)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="452"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="469"/>
         <source>(not found)</source>
         <translation>(nicht gefunden)</translation>
     </message>
@@ -50010,7 +50070,7 @@
         <translation>Externe Werkzeuge</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="413"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="430"/>
         <source>(unknown)</source>
         <translation>(unbekannt)</translation>
     </message>
@@ -50100,7 +50160,7 @@
         <translation>gRPC Compiler</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="394"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="411"/>
         <source>(module not found)</source>
         <translation>(Modul nicht gefunden)</translation>
     </message>
@@ -50129,6 +50189,21 @@
         <source>PyPI Package Management</source>
         <translation>PyPI Paketverwaltung</translation>
     </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="297"/>
+        <source>MicroPython - MPY Cross Compiler</source>
+        <translation>MicroPython - MPY Cross Compiler</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="300"/>
+        <source>MicroPython - ESP Tool</source>
+        <translation>MicroPython - ESP Werkzeug</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="306"/>
+        <source>MicroPython - PyBoard Flasher</source>
+        <translation>MicroPython - PyBoard Flasher</translation>
+    </message>
 </context>
 <context>
     <name>Project</name>
@@ -53657,24 +53732,89 @@
 <context>
     <name>PyBoardDevice</name>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="70"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="75"/>
         <source>PyBoard</source>
         <translation>PyBoard</translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Workspace Directory</source>
         <translation>Arbeitsverzeichnis</translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Python files for PyBoard devices are stored on the device. Therefore, to edit these files you need to have the device plugged in. Until you plug in a device, the standard directory will be used.</source>
         <translation>Pythondateien für PyBoard Geräte werden auf dem Gerät gespeichert. Um diese Dateien zu bearbeiten, muss das Gerät angesteckt sein. Solange kein Gerät angesteckt ist, wird das normale Arbeitsverzeichnis verwendet.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="186"/>
-        <source>MicroPython Install Instructions</source>
-        <translation>MicroPython Installationsanweisungen</translation>
+        <location filename="../MicroPython/PyBoardDevices.py" line="202"/>
+        <source>List DFU-capable Devices</source>
+        <translation>Liste der DFU fähigen Geräte</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>Flash MicroPython Firmware</source>
+        <translation>MicroPython Firmware flashen</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="209"/>
+        <source>MicroPython Flash Instructions</source>
+        <translation>MicroPython Flashanweisungen</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>dfu-util not available</source>
+        <translation>dfu-util ist nicht verfügbar</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>The dfu-util firmware flashing tool &lt;b&gt;dfu-util&lt;/b&gt; cannot be found or is not executable. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+        <translation>Das dfu-util Firmware Flashingprogramm &lt;b&gt;dfu-util&lt;/b&gt; kann nicht gefunden werden oder ist nicht ausführbar. Stelle sicher, dass es sich im Suchpfad befindet, oder konfiguriere es auf der MicroPython Konfigurationsseite.</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="260"/>
+        <source>&lt;h3&gt;Enable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect everything from your board&lt;/p&gt;&lt;p&gt;2. Disconnect your board&lt;/p&gt;&lt;p&gt;3. Connect the DFU/BOOT0 pin with a 3.3V pin&lt;/p&gt;&lt;p&gt;4. Re-connect your board&lt;/p&gt;&lt;hr /&gt;</source>
+        <translation>&lt;h3&gt;DFU Modus aktivieren&lt;/h3&gt;&lt;p&gt;1. Trenne alles von deinem Board&lt;/p&gt;&lt;p&gt;2. Trenne dein Board&lt;/p&gt;&lt;p&gt;3. Verbinde den DFU/BOOT0 pin mit dem 3,3V Pin&lt;/p&gt;&lt;p&gt;4. Verbinde dein Board wieder&lt;/p&gt;&lt;hr /&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="270"/>
+        <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Make sure that all other DFU capable devices except your PyBoard are disconnected.&lt;hr /&gt;</source>
+        <translation>&lt;p&gt;&lt;b&gt;Warnung:&lt;/b&gt; Stelle sicher, dass alle anderen DFU fähigen Geräte mit Ausnahme deines PyBoard getrennt sind.&lt;hr /&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="276"/>
+        <source>&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Drücke &lt;b&gt;OK&lt;/b&gt; zum Fortfahren...&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="279"/>
+        <source>Enable DFU mode</source>
+        <translation>DFU Modus aktivieren</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="293"/>
+        <source>&lt;h3&gt;Disable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect your board&lt;/p&gt;&lt;p&gt;2. Remove the DFU jumper&lt;/p&gt;&lt;p&gt;3. Re-connect your board&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation>&lt;h3&gt;DFU Modus deaktivieren&lt;/h3&gt;&lt;p&gt;1. Trenne dein BOard&lt;/p&gt;&lt;p&gt;2. Entferne die DFU Brücke&lt;/p&gt;&lt;p&gt;3. Verbinde dein Board wieder&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Drücke &lt;b&gt;OK&lt;/b&gt; zum Fortfahren...&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="301"/>
+        <source>Disable DFU mode</source>
+        <translation>DFU Modus deaktivieren</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>&apos;dfu-util&apos; Output</source>
+        <translation>&apos;dfu-util&apos; Ausgabe</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="322"/>
+        <source>List DFU capable Devices</source>
+        <translation>Liste der DFU fähigen Geräte</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="344"/>
+        <source>MicroPython Firmware Files (*.dfu);;All Files (*)</source>
+        <translation>MicroPython Firmwaredateien (*.dfu);;Alle Dateien (*)</translation>
     </message>
 </context>
 <context>
@@ -74491,7 +74631,7 @@
         <translation>Werkzeuge</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
+        <location filename="../UI/UserInterface.py" line="5115"/>
         <source>Help</source>
         <translation>Hilfe</translation>
     </message>
@@ -74501,7 +74641,7 @@
         <translation>&amp;Werkzeugleisten</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>Problem</source>
         <translation>Problem</translation>
     </message>
@@ -74521,7 +74661,7 @@
         <translation>&amp;Was ist das?</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>Process Generation Error</source>
         <translation>Fehler beim Prozessstart</translation>
     </message>
@@ -74591,7 +74731,7 @@
         <translation>E&amp;xtras</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Report Bug</source>
         <translation>Fehler berichten</translation>
     </message>
@@ -74611,7 +74751,7 @@
         <translation>&lt;b&gt;Fehler berichten...&lt;/b&gt;&lt;p&gt;Öffnet einen Dialog zum Senden eines Fehlerberichtes.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6315"/>
+        <location filename="../UI/UserInterface.py" line="6329"/>
         <source>Export Keyboard Shortcuts</source>
         <translation>Tastaturkurzbefehle exportieren</translation>
     </message>
@@ -74631,7 +74771,7 @@
         <translation>&lt;b&gt;Tastaturkurzbefehle exportieren&lt;/b&gt;&lt;p&gt;Exportiert die Tastaturkurzbefehle der Applikation.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Import Keyboard Shortcuts</source>
         <translation>Tastaturkurzbefehle importieren</translation>
     </message>
@@ -74786,7 +74926,7 @@
         <translation>&lt;b&gt;Dateien Seite an Seite vergleichen&lt;/b&gt;&lt;p&gt;Öffnet einen Dialog zum Vergleich zweier Dateien und zur Anzeige des Ergebnisse Seite an Seite.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>Drop Error</source>
         <translation>Drop-Fehler</translation>
     </message>
@@ -74856,32 +74996,32 @@
         <translation>&lt;b&gt;Ansichtenprofile&lt;/b&gt;&lt;p&gt;Ansichtenprofile konfigurieren. Mit diesem Dialog kann die Sichtbarkeit der verschiedenen Fenster für die vorbestimmten Ansichtenprofile eingestellt werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist or is zero length.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht oder hat die Größe Null.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4948"/>
+        <location filename="../UI/UserInterface.py" line="4962"/>
         <source>&lt;p&gt;Could not start Qt-Designer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Qt-Designer konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass es als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5020"/>
+        <location filename="../UI/UserInterface.py" line="5034"/>
         <source>&lt;p&gt;Could not start Qt-Linguist.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Qt-Linguist konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass es als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5073"/>
+        <location filename="../UI/UserInterface.py" line="5087"/>
         <source>&lt;p&gt;Could not start Qt-Assistant.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Qt-Assistant konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass es als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>&lt;p&gt;Could not start the tool entry &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;Ensure that it is available as &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der Werkzeugeeintrag &lt;b&gt;{0}&lt;/b&gt; konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass er als &lt;b&gt;{1}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; ist keine Datei.&lt;/p&gt;</translation>
     </message>
@@ -74906,7 +75046,7 @@
         <translation>&lt;b&gt;UI-Vorschau&lt;/b&gt;&lt;p&gt;Starte die UI-Vorschau.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5185"/>
+        <location filename="../UI/UserInterface.py" line="5199"/>
         <source>&lt;p&gt;Could not start UI Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die UI-Vorschau konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass sie als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
@@ -74931,7 +75071,7 @@
         <translation>&lt;b&gt;Übersetzungsvorschau&lt;/b&gt;&lt;p&gt;Dies startet das Programm zur Vorschau von Übersetzungen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5242"/>
+        <location filename="../UI/UserInterface.py" line="5256"/>
         <source>&lt;p&gt;Could not start Translation Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Übersetzungsvorschau konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass sie als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
@@ -74971,47 +75111,47 @@
         <translation>Aufgabenanzeige</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>Save tasks</source>
         <translation>Aufgaben speichern</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Aufgabendatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht geschrieben werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>Read tasks</source>
         <translation>Aufgaben lesen</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Aufgabendatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelesen werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
-        <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
-        <translation>Momentan ist kein Betrachter angegeben. Bitte benutzen Sie den Einstellungsdialog, um einen festzulegen.</translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="5115"/>
+        <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
+        <translation>Momentan ist kein Betrachter angegeben. Bitte benutzen Sie den Einstellungsdialog, um einen festzulegen.</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="5129"/>
         <source>&lt;p&gt;Could not start custom viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der Betrachter konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass er als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>Documentation Missing</source>
         <translation>Dokumentation fehlt</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>&lt;p&gt;The documentation starting point &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; could not be found.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der Dokumentationsstartpunkt „&lt;b&gt;{0}&lt;/b&gt;“ konnte nicht gefunden werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Email address or mail server address is empty. Please configure your Email settings in the Preferences Dialog.</source>
         <translation>E-Mail-Adresse oder Mailserver-Adresse sind leer. Bitte konfiguriere die E-Mail-Einstellungen im Einstellungsdialog.</translation>
     </message>
@@ -75106,7 +75246,7 @@
         <translation>Öffne die Eric-API-Dokumentation</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5135"/>
+        <location filename="../UI/UserInterface.py" line="5149"/>
         <source>&lt;p&gt;Could not start the help viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Hilfeanzeige konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass sie als &lt;b&gt;hh&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
@@ -75182,61 +75322,56 @@
         <translation>Profile</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4025"/>
+        <location filename="../UI/UserInterface.py" line="4039"/>
         <source>&amp;Builtin Tools</source>
         <translation>&amp;Eingebaute Werkzeuge</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5408"/>
+        <location filename="../UI/UserInterface.py" line="5422"/>
         <source>Starting process &apos;{0} {1}&apos;.
 </source>
         <translation>Starte Prozess „{0} {1}“.
 </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5502"/>
+        <location filename="../UI/UserInterface.py" line="5516"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
         <translation>Prozess „{0}“ ist beendet.
 </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>Documentation</source>
         <translation>Dokumentation</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5713"/>
+        <location filename="../UI/UserInterface.py" line="5727"/>
         <source>&lt;p&gt;The PyQt4 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der PyQt4-Dokumentations-Startpunkt ist nicht konfiguriert.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Error during updates check</source>
         <translation>Fehler während der Aktualisierungsprüfung</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>Update available</source>
         <translation>Aktualisierung verfügbar</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3650"/>
-        <source>&lt;h3&gt;Version Numbers&lt;/h3&gt;&lt;table&gt;</source>
-        <translation>&lt;h3&gt;Versionsnummern&lt;/h3&gt;&lt;table&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7312"/>
+        <location filename="../UI/UserInterface.py" line="7326"/>
         <source>&lt;/table&gt;</source>
         <translation>&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4070"/>
+        <location filename="../UI/UserInterface.py" line="4084"/>
         <source>Configure Tool Groups ...</source>
         <translation>Konfiguriere Werkzeuggruppen...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4074"/>
+        <location filename="../UI/UserInterface.py" line="4088"/>
         <source>Configure current Tool Group ...</source>
         <translation>Konfiguriere aktuelle Werkzeuggruppe...</translation>
     </message>
@@ -75251,22 +75386,22 @@
         <translation>Zeige externe &amp;Werkzeuge</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Could not perform updates check.</source>
         <translation>Konnte keine Aktualisierungsprüfung durchführen.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>&amp;Cancel</source>
         <translation>&amp;Abbrechen</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7096"/>
+        <location filename="../UI/UserInterface.py" line="7110"/>
         <source>Trying host {0}</source>
         <translation>Prüfe Host {0}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>First time usage</source>
         <translation>Erstmalige Nutzung</translation>
     </message>
@@ -75306,7 +75441,7 @@
         <translation>&amp;Plugininformationen...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4042"/>
+        <location filename="../UI/UserInterface.py" line="4056"/>
         <source>&amp;Plugin Tools</source>
         <translation>&amp;Pluginwerkzeuge</translation>
     </message>
@@ -75326,12 +75461,12 @@
         <translation>&lt;b&gt;Plugin deinstallieren...&lt;/b&gt;&lt;p&gt;Dies öffnet einen Dialog zur Deinstallation eines Plugins.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4190"/>
+        <location filename="../UI/UserInterface.py" line="4204"/>
         <source>&amp;Show all</source>
         <translation>Alle an&amp;zeigen</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4192"/>
+        <location filename="../UI/UserInterface.py" line="4206"/>
         <source>&amp;Hide all</source>
         <translation>Alle &amp;ausblenden</translation>
     </message>
@@ -75361,7 +75496,7 @@
         <translation>Zeige die verfügbaren eric-Versionen</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7297"/>
+        <location filename="../UI/UserInterface.py" line="7311"/>
         <source>&lt;h3&gt;Available versions&lt;/h3&gt;&lt;table&gt;</source>
         <translation>&lt;h3&gt;Verfügbare Versionen&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
@@ -75446,17 +75581,17 @@
         <translation>Externe Werkzeuge/{0}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>External Tools</source>
         <translation>Externe Werkzeuge</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5360"/>
+        <location filename="../UI/UserInterface.py" line="5374"/>
         <source>No tool entry found for external tool &apos;{0}&apos; in tool group &apos;{1}&apos;.</source>
         <translation>Kein Eintrag für das externe Werkzeug „{0}“ in der Gruppe „{1}“ gefunden.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>No toolgroup entry &apos;{0}&apos; found.</source>
         <translation>Kein Werkzeuggruppeneintrag „{0}“ gefunden.</translation>
     </message>
@@ -75471,22 +75606,22 @@
         <translation>&amp;Mehrfachprojektanzeige</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6634"/>
+        <location filename="../UI/UserInterface.py" line="6648"/>
         <source>Save session</source>
         <translation>Sitzung speichern</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6572"/>
+        <location filename="../UI/UserInterface.py" line="6586"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Sitzungsdatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht geschrieben werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>Read session</source>
         <translation>Sitzung lesen</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Sitzungsdatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelesen werden.&lt;/p&gt;</translation>
     </message>
@@ -75556,12 +75691,12 @@
         <translation>&lt;b&gt;Schalte das Fenster der Horizontalen Werkzeugbox um&lt;/b&gt;&lt;p&gt;Falls das Fenster der Horizontalen Werkzeugbox nicht sichtbar ist, wird es dargestellt. Ist es sichtbar, so wird es versteckt.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>Restart application</source>
         <translation>Anwendung neu starten</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>The application needs to be restarted. Do it now?</source>
         <translation>Die Anwendung muss neu gestartet werden. Jetzt durchführen?</translation>
     </message>
@@ -75706,7 +75841,7 @@
         <translation>&lt;b&gt;SQL-Browser&lt;/b&gt;&lt;p&gt;Erforsche eine SQL-Datenbank.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5265"/>
+        <location filename="../UI/UserInterface.py" line="5279"/>
         <source>&lt;p&gt;Could not start SQL Browser.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der SQL-Browser konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass er als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
@@ -75721,7 +75856,7 @@
         <translation>&amp;Icon-Editor...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt 3 support</source>
         <translation>Qt3-Unterstützung</translation>
     </message>
@@ -75771,7 +75906,7 @@
         <translation>Alt+Shift+B</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Keyboard shortcut file (*.e4k)</source>
         <translation>Tastaturkurzbefehlsdatei (*.e4k)</translation>
     </message>
@@ -75811,27 +75946,27 @@
         <translation>&lt;b&gt;Python 2-Dokumentation&lt;/b&gt;&lt;p&gt;Zeigt die Python 2-Dokumentation an. Ist kein Dokumentationsverzeichnis konfiguriert, so ist der Ort, an dem die Python 2-Dokumentation gesucht wird, unter Windows das Verzeichnis &lt;i&gt;doc&lt;/i&gt; unter dem Verzeichnis, in dem der konfigurierte Python 2-Interpreter installiert ist, und unter Unix das Verzeichnis &lt;i&gt;/usr/share/doc/packages/python/html/python-docs-html&lt;/i&gt;. Um dies zu überschreiben, können Sie die Umgebungsvariable PYTHON2DOCDIR setzen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>Error getting versions information</source>
         <translation>Fehler beim Herunterladen der Versionsinformationen</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7155"/>
+        <location filename="../UI/UserInterface.py" line="7169"/>
         <source>The versions information could not be downloaded. Please go online and try again.</source>
         <translation>Die Versionsinformationen konnten nicht heruntergeladen werden. Bitte gehen Sie online und versuchen Sie es erneut.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Open Browser</source>
         <translation>Browser starten</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Could not start a web browser</source>
         <translation>Der Systemwebbrowser konnte nicht gestartet werden</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>The versions information could not be downloaded for the last 7 days. Please go online and try again.</source>
         <translation>Die Versionsinformationen konnten seit 7 Tagen nicht heruntergeladen werden. Bitte gehen Sie online und versuchen Sie es erneut.</translation>
     </message>
@@ -75917,12 +76052,12 @@
         <translation>&lt;b&gt;Bildschirmfoto&lt;/b&gt;&lt;p&gt;Dies öffnet einen Dialog, um ein Bildschirmfoto aufzunehmen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5337"/>
+        <location filename="../UI/UserInterface.py" line="5351"/>
         <source>&lt;p&gt;Could not start Snapshot tool.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Bildschirmfotoanwendung konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass sie als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7368"/>
+        <location filename="../UI/UserInterface.py" line="7382"/>
         <source>Select Workspace Directory</source>
         <translation>Wähle Arbeitsverzeichnis</translation>
     </message>
@@ -76287,7 +76422,7 @@
         <translation>Öffne die PyQt5-Dokumentation</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5775"/>
+        <location filename="../UI/UserInterface.py" line="5789"/>
         <source>&lt;p&gt;The PyQt5 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der PyQt5-Dokumentations-Startpunkt ist nicht konfiguriert.&lt;/p&gt;</translation>
     </message>
@@ -76297,7 +76432,7 @@
         <translation>&lt;b&gt;Python 3-Dokumentation&lt;/b&gt;&lt;p&gt;Zeigt die Python 3-Dokumentation an. Ist kein Dokumentationsverzeichnis konfiguriert, so ist der Ort, an dem die Python 3-Dokumentation gesucht wird, unter Windows das Verzeichnis &lt;i&gt;doc&lt;/i&gt; unter dem Verzeichnis, in dem der Python 3-Interpreter installiert ist, und unter Unix das Verzeichnis &lt;i&gt;/usr/share/doc/packages/python/html&lt;/i&gt;. Um dies zu überschreiben, können Sie die Umgebungsvariable PYTHON3DOCDIR setzen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>%v/%m</source>
         <translation>%v/%m</translation>
     </message>
@@ -76317,7 +76452,7 @@
         <translation>&lt;b&gt;Zeige Fehlerbericht...&lt;/b&gt;&lt;p&gt;Dies öffnet einen Dialog zur Anzeige des aktuellsten Fehlerberichtes.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7091"/>
+        <location filename="../UI/UserInterface.py" line="7105"/>
         <source>Version Check</source>
         <translation>Versionsprüfung</translation>
     </message>
@@ -76388,27 +76523,27 @@
         <translation>&lt;b&gt;Eric-API-Dokumentation&lt;/b&gt;&lt;p&gt;Zeige die Eric-API-Dokumentation an. Der Pfad für die Dokumentation ist das Unterverzeichnis Documentation/Source im eric6-Installationverzeichnis.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt v.3 is not supported by eric6.</source>
         <translation>Qt v.3 wird von eric6 nicht unterstützt.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>The update to &lt;b&gt;{0}&lt;/b&gt; of eric6 is available at &lt;b&gt;{1}&lt;/b&gt;. Would you like to get it?</source>
         <translation>Eine Aktualisierung auf &lt;b&gt;{0}&lt;/b&gt; von Eric6 ist unter &lt;b&gt;{1}&lt;/b&gt; verfügbar. Wollen Sie sie laden?</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>Eric6 is up to date</source>
         <translation>Eric6 ist aktuell</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>You are using the latest version of eric6</source>
         <translation>Sie verwenden die aktuellste Version von eric6</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>eric6 has not been configured yet. The configuration dialog will be started.</source>
         <translation>eric6 wurde noch nicht konfiguriert. Der Konfigurationsdialog wird nun gestartet.</translation>
     </message>
@@ -76418,17 +76553,17 @@
         <translation>Erzeuge Werkzeugleisten der Plug-ins...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4045"/>
+        <location filename="../UI/UserInterface.py" line="4059"/>
         <source>&amp;User Tools</source>
         <translation>&amp;Benutzerwerkzeuge</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4117"/>
+        <location filename="../UI/UserInterface.py" line="4131"/>
         <source>No User Tools Configured</source>
         <translation>Keine Benutzerwerkzeuge konfiguriert</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7107"/>
+        <location filename="../UI/UserInterface.py" line="7121"/>
         <source>The versions information cannot not be downloaded because you are &lt;b&gt;offline&lt;/b&gt;. Please go online and try again.</source>
         <translation>Die Versionsinformationen konnten nicht heruntergeladen werden, da sie &lt;b&gt;nicht verbunden&lt;/b&gt; sind. Bitte gehen Sie online und versuchen Sie es erneut.</translation>
     </message>
@@ -76473,7 +76608,7 @@
         <translation>&lt;b&gt;Sitzung speichern...&lt;/b&gt;&lt;p&gt;Dies speichert die aktuelle Sitzung in eine Datei. Es wird ein Dialog zur Eingabe des Dateinamens geöffnet.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>Load session</source>
         <translation>Sitzung laden</translation>
     </message>
@@ -76488,17 +76623,17 @@
         <translation>&lt;b&gt;Sitzung laden...&lt;/b&gt;&lt;p&gt;Dies lädt eine zuvor gesicherte Sitzung. Es wird ein Dialog zur Eingabe des Dateinamens geöffnet.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>eric6 Session Files (*.e5s)</source>
         <translation>eric6 Sitzungsdateien (*.e5s)</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>Crash Session found!</source>
         <translation>Absturzsitzung gefunden!</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>A session file of a crashed session was found. Shall this session be restored?</source>
         <translation>Eine Sitzungsdatei einer abgestürzten Sitzung wurde gefunden. Soll diese Sitzung wiederhergestellt werden?</translation>
     </message>
@@ -76513,17 +76648,17 @@
         <translation>Initialisiere Plugins...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>Update Check</source>
         <translation>Aktualisierungsprüfung</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>You installed eric directly from the source code. There is no possibility to check for the availability of an update.</source>
         <translation>Eric wurde direkt von vom Quelltext installiert. Eine Aktualitätsprüfung ist daher nicht möglich.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7232"/>
+        <location filename="../UI/UserInterface.py" line="7246"/>
         <source>You are using a snapshot release of eric6. A more up-to-date stable release might be available.</source>
         <translation>Sie verwenden ein Snapshot-Release von eri6. Eine neueres, stabiles Release könnte verfügbar sein.</translation>
     </message>
@@ -76578,7 +76713,7 @@
         <translation>&lt;b&gt;PySide2-Dokumentation&lt;/b&gt;&lt;p&gt;Zeige die PySide2-Dokumentation an. Abhängig von den Einstellungen wird Erics interner Hilfeanzeiger/Webbrowser, ein externer Webbrowser oder Qt Assistant verwendet.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>&lt;p&gt;The PySide{0} documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der PySide{0}-Dokumentations-Startpunkt ist nicht konfiguriert.&lt;/p&gt;</translation>
     </message>
@@ -76654,17 +76789,17 @@
         <translation>&lt;b&gt;Neustart der Entwicklungsumgebung&lt;/b&gt;&lt;p&gt;Dies startet die Entwicklungsumgebung neu. Ungesicherte Änderungen können zuvor gesichert werden. Ein Python-Programm, das gerade debuggt wird, wird beendet und sämtliche Einstellungen werden gespeichert.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>Start Web Browser</source>
         <translation>Webbrowser starten</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6001"/>
+        <location filename="../UI/UserInterface.py" line="6015"/>
         <source>The eric6 web browser could not be started.</source>
         <translation>Der eric6 Webbrowser konnte nicht gestartet werden.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>&lt;p&gt;The eric6 web browser is not started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Der eric6 Webbrowser ist nicht gestartet.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
@@ -76758,6 +76893,11 @@
         <source>Central Park</source>
         <translation>Mittelbereich</translation>
     </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3650"/>
+        <source>&lt;h2&gt;Version Numbers&lt;/h2&gt;&lt;table&gt;</source>
+        <translation>&lt;h2&gt;Versionsnummern&lt;/h2&gt;&lt;table&gt;</translation>
+    </message>
 </context>
 <context>
     <name>UserPropertiesDialog</name>
@@ -77011,7 +77151,7 @@
 <context>
     <name>VariableItem</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="207"/>
+        <location filename="../Debugger/VariablesViewer.py" line="211"/>
         <source>&lt;double click to show value&gt;</source>
         <translation>&lt;Doppelklick, um Wert anzuzeigen&gt;</translation>
     </message>
@@ -77078,22 +77218,22 @@
 <context>
     <name>VariablesModel</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="278"/>
+        <location filename="../Debugger/VariablesViewer.py" line="282"/>
         <source>Globals</source>
         <translation>Global</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="280"/>
+        <location filename="../Debugger/VariablesViewer.py" line="284"/>
         <source>Locals</source>
         <translation>Lokal</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Type</source>
         <translation>Typ</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Value</source>
         <translation>Wert</translation>
     </message>
@@ -77101,22 +77241,22 @@
 <context>
     <name>VariablesViewer</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="951"/>
+        <location filename="../Debugger/VariablesViewer.py" line="955"/>
         <source>Global Variables</source>
         <translation>Globale Variablen</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="952"/>
+        <location filename="../Debugger/VariablesViewer.py" line="956"/>
         <source>&lt;b&gt;The Global Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the global variables of the debugged program.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Das Globale Variablen Fenster&lt;/b&gt;&lt;p&gt;Dieses Fenster zeigt die globalen Variablen des untersuchten Programmes an.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="958"/>
+        <location filename="../Debugger/VariablesViewer.py" line="962"/>
         <source>Local Variables</source>
         <translation>Lokale Variablen</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="959"/>
+        <location filename="../Debugger/VariablesViewer.py" line="963"/>
         <source>&lt;b&gt;The Local Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the local variables of the debugged program.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Das Lokale Variablen Fenster&lt;/b&gt;&lt;p&gt;Dieses Fenster zeigt die lokalen Variablen des untersuchten Programmes an.&lt;/p&gt;</translation>
     </message>
@@ -77126,40 +77266,45 @@
         <translation>{0} Einträge</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1076"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
         <source>Show Details...</source>
         <translation>Zeige Details...</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1091"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1095"/>
         <source>Configure...</source>
         <translation>Einstellungen...</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1089"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1093"/>
         <source>Refresh</source>
         <translation>Aktualisieren</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1078"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1082"/>
         <source>Expand</source>
         <translation>Ausklappen</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1079"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1083"/>
         <source>Collapse</source>
         <translation>Einklappen</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1084"/>
         <source>Collapse All</source>
         <translation>Alle einklappen</translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1092"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1096"/>
         <source>Variables Type Filter...</source>
         <translation>Variablentypenfilter …</translation>
     </message>
+    <message>
+        <location filename="../Debugger/VariablesViewer.py" line="47"/>
+        <source>unsized</source>
+        <translation>ohne Länge</translation>
+    </message>
 </context>
 <context>
     <name>VcsCommandOptionsDialog</name>
--- a/eric6/i18n/eric6_empty.ts	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/i18n/eric6_empty.ts	Sun Dec 01 16:38:47 2019 +0100
@@ -43781,43 +43781,78 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="39"/>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="42"/>
         <source>All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="255"/>
+        <source>Documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="261"/>
+        <source>MicroPython:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="268"/>
+        <source>Enter the URL for the MicroPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="275"/>
+        <source>CircuitPython:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="282"/>
+        <source>Enter the URL for the CircuitPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="289"/>
+        <source>BBC micro:bit:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="296"/>
+        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="172"/>
-        <source>Documentation</source>
+        <source>PyBoard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="178"/>
-        <source>MicroPython:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="185"/>
-        <source>Enter the URL for the MicroPython documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="192"/>
-        <source>CircuitPython:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="199"/>
-        <source>Enter the URL for the CircuitPython documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="206"/>
-        <source>BBC micro:bit:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="213"/>
-        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <source>dfu-util Path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="194"/>
+        <source>Enter the path of the dfu-util flashing executable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="204"/>
+        <source>Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="217"/>
+        <source>Enter the URL for the MicroPython firmware for PyBoard, ESP8266 and ESP32</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="231"/>
+        <source>Enter the URL for the CircuitPython firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="245"/>
+        <source>Enter the URL for the BBC micro:bit Firmware</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -44013,7 +44048,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>Synchronize Time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -44028,107 +44063,107 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1366"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1421"/>
         <source>Compile Python File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1386"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1441"/>
         <source>Compile Current Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1140"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1148"/>
         <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1149"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1157"/>
         <source>No version information available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1151"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1159"/>
         <source>Device Version Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1174"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1182"/>
         <source>unknown</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>Device Implementation Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1224"/>
-        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1232"/>
+        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1240"/>
         <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1246"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1254"/>
         <source>Device Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>Local Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>Error handling device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1318"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1373"/>
         <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1336"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1391"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1346"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1401"/>
         <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1356"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1411"/>
         <source>&apos;mpy-cross&apos; Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1379"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1434"/>
         <source>The current editor does not contain a Python file. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -44153,13 +44188,38 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1126"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1134"/>
         <source>Show Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1138"/>
+        <source>Configure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1113"/>
+        <source>Show Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1130"/>
-        <source>Configure</source>
+        <source>Download Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>Date and Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1293"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -49392,17 +49452,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1606"/>
+        <location filename="../Preferences/__init__.py" line="1610"/>
         <source>Export Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Import Preferences</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49810,7 +49870,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="413"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="430"/>
         <source>(unknown)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49825,17 +49885,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="361"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="378"/>
         <source>(not configured)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="415"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="432"/>
         <source>(not executable)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="452"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="469"/>
         <source>(not found)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49850,7 +49910,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="394"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="411"/>
         <source>(module not found)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49879,6 +49939,21 @@
         <source>PyPI Package Management</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="297"/>
+        <source>MicroPython - MPY Cross Compiler</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="300"/>
+        <source>MicroPython - ESP Tool</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="306"/>
+        <source>MicroPython - PyBoard Flasher</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Project</name>
@@ -53395,23 +53470,88 @@
 <context>
     <name>PyBoardDevice</name>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="70"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="75"/>
         <source>PyBoard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Python files for PyBoard devices are stored on the device. Therefore, to edit these files you need to have the device plugged in. Until you plug in a device, the standard directory will be used.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="186"/>
-        <source>MicroPython Install Instructions</source>
+        <location filename="../MicroPython/PyBoardDevices.py" line="202"/>
+        <source>List DFU-capable Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>Flash MicroPython Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="209"/>
+        <source>MicroPython Flash Instructions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>dfu-util not available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>The dfu-util firmware flashing tool &lt;b&gt;dfu-util&lt;/b&gt; cannot be found or is not executable. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="260"/>
+        <source>&lt;h3&gt;Enable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect everything from your board&lt;/p&gt;&lt;p&gt;2. Disconnect your board&lt;/p&gt;&lt;p&gt;3. Connect the DFU/BOOT0 pin with a 3.3V pin&lt;/p&gt;&lt;p&gt;4. Re-connect your board&lt;/p&gt;&lt;hr /&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="270"/>
+        <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Make sure that all other DFU capable devices except your PyBoard are disconnected.&lt;hr /&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="276"/>
+        <source>&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="279"/>
+        <source>Enable DFU mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="293"/>
+        <source>&lt;h3&gt;Disable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect your board&lt;/p&gt;&lt;p&gt;2. Remove the DFU jumper&lt;/p&gt;&lt;p&gt;3. Re-connect your board&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="301"/>
+        <source>Disable DFU mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>&apos;dfu-util&apos; Output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="322"/>
+        <source>List DFU capable Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="344"/>
+        <source>MicroPython Firmware Files (*.dfu);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -74504,7 +74644,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Report Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75029,7 +75169,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6315"/>
+        <location filename="../UI/UserInterface.py" line="6329"/>
         <source>Export Keyboard Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75049,7 +75189,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Import Keyboard Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75429,7 +75569,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
+        <location filename="../UI/UserInterface.py" line="5115"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75479,354 +75619,349 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3650"/>
-        <source>&lt;h3&gt;Version Numbers&lt;/h3&gt;&lt;table&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7312"/>
+        <location filename="../UI/UserInterface.py" line="7326"/>
         <source>&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Email address or mail server address is empty. Please configure your Email settings in the Preferences Dialog.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>Restart application</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>The application needs to be restarted. Do it now?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4025"/>
+        <location filename="../UI/UserInterface.py" line="4039"/>
         <source>&amp;Builtin Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4042"/>
+        <location filename="../UI/UserInterface.py" line="4056"/>
         <source>&amp;Plugin Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4045"/>
+        <location filename="../UI/UserInterface.py" line="4059"/>
         <source>&amp;User Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4070"/>
+        <location filename="../UI/UserInterface.py" line="4084"/>
         <source>Configure Tool Groups ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4074"/>
+        <location filename="../UI/UserInterface.py" line="4088"/>
         <source>Configure current Tool Group ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4117"/>
+        <location filename="../UI/UserInterface.py" line="4131"/>
         <source>No User Tools Configured</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4190"/>
+        <location filename="../UI/UserInterface.py" line="4204"/>
         <source>&amp;Show all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4192"/>
+        <location filename="../UI/UserInterface.py" line="4206"/>
         <source>&amp;Hide all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt 3 support</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt v.3 is not supported by eric6.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>Problem</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist or is zero length.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4948"/>
+        <location filename="../UI/UserInterface.py" line="4962"/>
         <source>&lt;p&gt;Could not start Qt-Designer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5020"/>
+        <location filename="../UI/UserInterface.py" line="5034"/>
         <source>&lt;p&gt;Could not start Qt-Linguist.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5073"/>
+        <location filename="../UI/UserInterface.py" line="5087"/>
         <source>&lt;p&gt;Could not start Qt-Assistant.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
-        <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="5115"/>
+        <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="5129"/>
         <source>&lt;p&gt;Could not start custom viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5135"/>
+        <location filename="../UI/UserInterface.py" line="5149"/>
         <source>&lt;p&gt;Could not start the help viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5185"/>
+        <location filename="../UI/UserInterface.py" line="5199"/>
         <source>&lt;p&gt;Could not start UI Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5242"/>
+        <location filename="../UI/UserInterface.py" line="5256"/>
         <source>&lt;p&gt;Could not start Translation Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5265"/>
+        <location filename="../UI/UserInterface.py" line="5279"/>
         <source>&lt;p&gt;Could not start SQL Browser.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5337"/>
+        <location filename="../UI/UserInterface.py" line="5351"/>
         <source>&lt;p&gt;Could not start Snapshot tool.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>External Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5360"/>
+        <location filename="../UI/UserInterface.py" line="5374"/>
         <source>No tool entry found for external tool &apos;{0}&apos; in tool group &apos;{1}&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>No toolgroup entry &apos;{0}&apos; found.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5408"/>
+        <location filename="../UI/UserInterface.py" line="5422"/>
         <source>Starting process &apos;{0} {1}&apos;.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>&lt;p&gt;Could not start the tool entry &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;Ensure that it is available as &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5502"/>
+        <location filename="../UI/UserInterface.py" line="5516"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>Documentation Missing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>&lt;p&gt;The documentation starting point &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; could not be found.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5713"/>
+        <location filename="../UI/UserInterface.py" line="5727"/>
         <source>&lt;p&gt;The PyQt4 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5775"/>
+        <location filename="../UI/UserInterface.py" line="5789"/>
         <source>&lt;p&gt;The PyQt5 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Open Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Could not start a web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Keyboard shortcut file (*.e4k)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>Save tasks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>Read tasks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6634"/>
+        <location filename="../UI/UserInterface.py" line="6648"/>
         <source>Save session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6572"/>
+        <location filename="../UI/UserInterface.py" line="6586"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>Read session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>Drop Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>&amp;Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>%v/%m</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7091"/>
+        <location filename="../UI/UserInterface.py" line="7105"/>
         <source>Version Check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7096"/>
+        <location filename="../UI/UserInterface.py" line="7110"/>
         <source>Trying host {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>Error getting versions information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7107"/>
+        <location filename="../UI/UserInterface.py" line="7121"/>
         <source>The versions information cannot not be downloaded because you are &lt;b&gt;offline&lt;/b&gt;. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7155"/>
+        <location filename="../UI/UserInterface.py" line="7169"/>
         <source>The versions information could not be downloaded. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>The versions information could not be downloaded for the last 7 days. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>Update available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>The update to &lt;b&gt;{0}&lt;/b&gt; of eric6 is available at &lt;b&gt;{1}&lt;/b&gt;. Would you like to get it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>Eric6 is up to date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>You are using the latest version of eric6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Error during updates check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Could not perform updates check.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7297"/>
+        <location filename="../UI/UserInterface.py" line="7311"/>
         <source>&lt;h3&gt;Available versions&lt;/h3&gt;&lt;table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>First time usage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>eric6 has not been configured yet. The configuration dialog will be started.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7368"/>
+        <location filename="../UI/UserInterface.py" line="7382"/>
         <source>Select Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75841,7 +75976,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>Load session</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75856,17 +75991,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>eric6 Session Files (*.e5s)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>Crash Session found!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>A session file of a crashed session was found. Shall this session be restored?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75881,17 +76016,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>Update Check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>You installed eric directly from the source code. There is no possibility to check for the availability of an update.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7232"/>
+        <location filename="../UI/UserInterface.py" line="7246"/>
         <source>You are using a snapshot release of eric6. A more up-to-date stable release might be available.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75946,7 +76081,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>&lt;p&gt;The PySide{0} documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76022,17 +76157,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>Start Web Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6001"/>
+        <location filename="../UI/UserInterface.py" line="6015"/>
         <source>The eric6 web browser could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>&lt;p&gt;The eric6 web browser is not started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76126,6 +76261,11 @@
         <source>Central Park</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3650"/>
+        <source>&lt;h2&gt;Version Numbers&lt;/h2&gt;&lt;table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UserPropertiesDialog</name>
@@ -76378,7 +76518,7 @@
 <context>
     <name>VariableItem</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="207"/>
+        <location filename="../Debugger/VariablesViewer.py" line="211"/>
         <source>&lt;double click to show value&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76442,22 +76582,22 @@
 <context>
     <name>VariablesModel</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="278"/>
+        <location filename="../Debugger/VariablesViewer.py" line="282"/>
         <source>Globals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="280"/>
+        <location filename="../Debugger/VariablesViewer.py" line="284"/>
         <source>Locals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76465,37 +76605,37 @@
 <context>
     <name>VariablesViewer</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="951"/>
+        <location filename="../Debugger/VariablesViewer.py" line="955"/>
         <source>Global Variables</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="952"/>
+        <location filename="../Debugger/VariablesViewer.py" line="956"/>
         <source>&lt;b&gt;The Global Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the global variables of the debugged program.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="958"/>
+        <location filename="../Debugger/VariablesViewer.py" line="962"/>
         <source>Local Variables</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="959"/>
+        <location filename="../Debugger/VariablesViewer.py" line="963"/>
         <source>&lt;b&gt;The Local Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the local variables of the debugged program.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1076"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
         <source>Show Details...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1089"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1093"/>
         <source>Refresh</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1091"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1095"/>
         <source>Configure...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76505,25 +76645,30 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1078"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1082"/>
         <source>Expand</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1079"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1083"/>
         <source>Collapse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1084"/>
         <source>Collapse All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1092"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1096"/>
         <source>Variables Type Filter...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/VariablesViewer.py" line="47"/>
+        <source>unsized</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VcsCommandOptionsDialog</name>
--- a/eric6/i18n/eric6_en.ts	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/i18n/eric6_en.ts	Sun Dec 01 16:38:47 2019 +0100
@@ -43820,43 +43820,78 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="39"/>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="42"/>
         <source>All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="255"/>
+        <source>Documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="261"/>
+        <source>MicroPython:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="268"/>
+        <source>Enter the URL for the MicroPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="275"/>
+        <source>CircuitPython:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="282"/>
+        <source>Enter the URL for the CircuitPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="289"/>
+        <source>BBC micro:bit:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="296"/>
+        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="172"/>
-        <source>Documentation</source>
+        <source>PyBoard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="178"/>
-        <source>MicroPython:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="185"/>
-        <source>Enter the URL for the MicroPython documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="192"/>
-        <source>CircuitPython:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="199"/>
-        <source>Enter the URL for the CircuitPython documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="206"/>
-        <source>BBC micro:bit:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="213"/>
-        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <source>dfu-util Path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="194"/>
+        <source>Enter the path of the dfu-util flashing executable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="204"/>
+        <source>Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="217"/>
+        <source>Enter the URL for the MicroPython firmware for PyBoard, ESP8266 and ESP32</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="231"/>
+        <source>Enter the URL for the CircuitPython firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="245"/>
+        <source>Enter the URL for the BBC micro:bit Firmware</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -44053,7 +44088,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>Synchronize Time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -44068,107 +44103,107 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1366"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1421"/>
         <source>Compile Python File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1386"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1441"/>
         <source>Compile Current Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1140"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1148"/>
         <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1149"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1157"/>
         <source>No version information available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1151"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1159"/>
         <source>Device Version Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1174"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1182"/>
         <source>unknown</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>Device Implementation Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1224"/>
-        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1232"/>
+        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1240"/>
         <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1246"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1254"/>
         <source>Device Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>Local Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>Error handling device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1318"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1373"/>
         <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1336"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1391"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1346"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1401"/>
         <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1356"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1411"/>
         <source>&apos;mpy-cross&apos; Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1379"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1434"/>
         <source>The current editor does not contain a Python file. Aborting...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -44193,13 +44228,38 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1126"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1134"/>
         <source>Show Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1138"/>
+        <source>Configure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1113"/>
+        <source>Show Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1130"/>
-        <source>Configure</source>
+        <source>Download Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>Date and Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1293"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -49433,17 +49493,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1606"/>
+        <location filename="../Preferences/__init__.py" line="1610"/>
         <source>Export Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Import Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49801,7 +49861,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="413"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="430"/>
         <source>(unknown)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49811,17 +49871,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="361"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="378"/>
         <source>(not configured)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="415"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="432"/>
         <source>(not executable)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="452"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="469"/>
         <source>(not found)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49891,7 +49951,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="394"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="411"/>
         <source>(module not found)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49920,6 +49980,21 @@
         <source>PyPI Package Management</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="297"/>
+        <source>MicroPython - MPY Cross Compiler</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="300"/>
+        <source>MicroPython - ESP Tool</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="306"/>
+        <source>MicroPython - PyBoard Flasher</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Project</name>
@@ -53437,23 +53512,88 @@
 <context>
     <name>PyBoardDevice</name>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="70"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="75"/>
         <source>PyBoard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Python files for PyBoard devices are stored on the device. Therefore, to edit these files you need to have the device plugged in. Until you plug in a device, the standard directory will be used.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="186"/>
-        <source>MicroPython Install Instructions</source>
+        <location filename="../MicroPython/PyBoardDevices.py" line="202"/>
+        <source>List DFU-capable Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>Flash MicroPython Firmware</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="209"/>
+        <source>MicroPython Flash Instructions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>dfu-util not available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>The dfu-util firmware flashing tool &lt;b&gt;dfu-util&lt;/b&gt; cannot be found or is not executable. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="260"/>
+        <source>&lt;h3&gt;Enable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect everything from your board&lt;/p&gt;&lt;p&gt;2. Disconnect your board&lt;/p&gt;&lt;p&gt;3. Connect the DFU/BOOT0 pin with a 3.3V pin&lt;/p&gt;&lt;p&gt;4. Re-connect your board&lt;/p&gt;&lt;hr /&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="270"/>
+        <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Make sure that all other DFU capable devices except your PyBoard are disconnected.&lt;hr /&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="276"/>
+        <source>&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="279"/>
+        <source>Enable DFU mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="293"/>
+        <source>&lt;h3&gt;Disable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect your board&lt;/p&gt;&lt;p&gt;2. Remove the DFU jumper&lt;/p&gt;&lt;p&gt;3. Re-connect your board&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="301"/>
+        <source>Disable DFU mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>&apos;dfu-util&apos; Output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="322"/>
+        <source>List DFU capable Devices</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="344"/>
+        <source>MicroPython Firmware Files (*.dfu);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -74229,7 +74369,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Report Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -74614,7 +74754,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6315"/>
+        <location filename="../UI/UserInterface.py" line="6329"/>
         <source>Export Keyboard Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -74634,7 +74774,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Import Keyboard Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -74879,7 +75019,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
+        <location filename="../UI/UserInterface.py" line="5115"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
@@ -74929,264 +75069,259 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3650"/>
-        <source>&lt;h3&gt;Version Numbers&lt;/h3&gt;&lt;table&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7312"/>
+        <location filename="../UI/UserInterface.py" line="7326"/>
         <source>&lt;/table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3709"/>
+        <location filename="../UI/UserInterface.py" line="3723"/>
         <source>Email address or mail server address is empty. Please configure your Email settings in the Preferences Dialog.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>Restart application</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3989"/>
+        <location filename="../UI/UserInterface.py" line="4003"/>
         <source>The application needs to be restarted. Do it now?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4070"/>
+        <location filename="../UI/UserInterface.py" line="4084"/>
         <source>Configure Tool Groups ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4074"/>
+        <location filename="../UI/UserInterface.py" line="4088"/>
         <source>Configure current Tool Group ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4025"/>
+        <location filename="../UI/UserInterface.py" line="4039"/>
         <source>&amp;Builtin Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4042"/>
+        <location filename="../UI/UserInterface.py" line="4056"/>
         <source>&amp;Plugin Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4190"/>
+        <location filename="../UI/UserInterface.py" line="4204"/>
         <source>&amp;Show all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4192"/>
+        <location filename="../UI/UserInterface.py" line="4206"/>
         <source>&amp;Hide all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt 3 support</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>Problem</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5229"/>
+        <location filename="../UI/UserInterface.py" line="5243"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist or is zero length.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>Process Generation Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4948"/>
+        <location filename="../UI/UserInterface.py" line="4962"/>
         <source>&lt;p&gt;Could not start Qt-Designer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5020"/>
+        <location filename="../UI/UserInterface.py" line="5034"/>
         <source>&lt;p&gt;Could not start Qt-Linguist.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5073"/>
+        <location filename="../UI/UserInterface.py" line="5087"/>
         <source>&lt;p&gt;Could not start Qt-Assistant.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5101"/>
-        <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="5115"/>
+        <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="5129"/>
         <source>&lt;p&gt;Could not start custom viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5135"/>
+        <location filename="../UI/UserInterface.py" line="5149"/>
         <source>&lt;p&gt;Could not start the help viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5185"/>
+        <location filename="../UI/UserInterface.py" line="5199"/>
         <source>&lt;p&gt;Could not start UI Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5242"/>
+        <location filename="../UI/UserInterface.py" line="5256"/>
         <source>&lt;p&gt;Could not start Translation Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5265"/>
+        <location filename="../UI/UserInterface.py" line="5279"/>
         <source>&lt;p&gt;Could not start SQL Browser.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>External Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5360"/>
+        <location filename="../UI/UserInterface.py" line="5374"/>
         <source>No tool entry found for external tool &apos;{0}&apos; in tool group &apos;{1}&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5369"/>
+        <location filename="../UI/UserInterface.py" line="5383"/>
         <source>No toolgroup entry &apos;{0}&apos; found.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5408"/>
+        <location filename="../UI/UserInterface.py" line="5422"/>
         <source>Starting process &apos;{0} {1}&apos;.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5424"/>
+        <location filename="../UI/UserInterface.py" line="5438"/>
         <source>&lt;p&gt;Could not start the tool entry &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;Ensure that it is available as &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5502"/>
+        <location filename="../UI/UserInterface.py" line="5516"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>Documentation Missing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5905"/>
+        <location filename="../UI/UserInterface.py" line="5919"/>
         <source>&lt;p&gt;The documentation starting point &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; could not be found.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5713"/>
+        <location filename="../UI/UserInterface.py" line="5727"/>
         <source>&lt;p&gt;The PyQt4 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6339"/>
+        <location filename="../UI/UserInterface.py" line="6353"/>
         <source>Keyboard shortcut file (*.e4k)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>Save tasks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6509"/>
+        <location filename="../UI/UserInterface.py" line="6523"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>Read tasks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6538"/>
+        <location filename="../UI/UserInterface.py" line="6552"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6634"/>
+        <location filename="../UI/UserInterface.py" line="6648"/>
         <source>Save session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6572"/>
+        <location filename="../UI/UserInterface.py" line="6586"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>Read session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6618"/>
+        <location filename="../UI/UserInterface.py" line="6632"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>Drop Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6902"/>
+        <location filename="../UI/UserInterface.py" line="6916"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>&amp;Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7096"/>
+        <location filename="../UI/UserInterface.py" line="7110"/>
         <source>Trying host {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>Update available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Error during updates check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7273"/>
+        <location filename="../UI/UserInterface.py" line="7287"/>
         <source>Could not perform updates check.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7297"/>
+        <location filename="../UI/UserInterface.py" line="7311"/>
         <source>&lt;h3&gt;Available versions&lt;/h3&gt;&lt;table&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>First time usage</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75226,27 +75361,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>Error getting versions information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7155"/>
+        <location filename="../UI/UserInterface.py" line="7169"/>
         <source>The versions information could not be downloaded. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Open Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6107"/>
+        <location filename="../UI/UserInterface.py" line="6121"/>
         <source>Could not start a web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7162"/>
+        <location filename="../UI/UserInterface.py" line="7176"/>
         <source>The versions information could not be downloaded for the last 7 days. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75332,12 +75467,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5337"/>
+        <location filename="../UI/UserInterface.py" line="5351"/>
         <source>&lt;p&gt;Could not start Snapshot tool.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7368"/>
+        <location filename="../UI/UserInterface.py" line="7382"/>
         <source>Select Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75702,7 +75837,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5775"/>
+        <location filename="../UI/UserInterface.py" line="5789"/>
         <source>&lt;p&gt;The PyQt5 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75712,7 +75847,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7087"/>
+        <location filename="../UI/UserInterface.py" line="7101"/>
         <source>%v/%m</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75732,7 +75867,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7091"/>
+        <location filename="../UI/UserInterface.py" line="7105"/>
         <source>Version Check</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75802,27 +75937,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5048"/>
+        <location filename="../UI/UserInterface.py" line="5062"/>
         <source>Qt v.3 is not supported by eric6.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7254"/>
+        <location filename="../UI/UserInterface.py" line="7268"/>
         <source>The update to &lt;b&gt;{0}&lt;/b&gt; of eric6 is available at &lt;b&gt;{1}&lt;/b&gt;. Would you like to get it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>Eric6 is up to date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7266"/>
+        <location filename="../UI/UserInterface.py" line="7280"/>
         <source>You are using the latest version of eric6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7349"/>
+        <location filename="../UI/UserInterface.py" line="7363"/>
         <source>eric6 has not been configured yet. The configuration dialog will be started.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75832,17 +75967,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4045"/>
+        <location filename="../UI/UserInterface.py" line="4059"/>
         <source>&amp;User Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4117"/>
+        <location filename="../UI/UserInterface.py" line="4131"/>
         <source>No User Tools Configured</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7107"/>
+        <location filename="../UI/UserInterface.py" line="7121"/>
         <source>The versions information cannot not be downloaded because you are &lt;b&gt;offline&lt;/b&gt;. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75887,7 +76022,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>Load session</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75902,17 +76037,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6656"/>
+        <location filename="../UI/UserInterface.py" line="6670"/>
         <source>eric6 Session Files (*.e5s)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>Crash Session found!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6707"/>
+        <location filename="../UI/UserInterface.py" line="6721"/>
         <source>A session file of a crashed session was found. Shall this session be restored?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75927,17 +76062,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>Update Check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7242"/>
+        <location filename="../UI/UserInterface.py" line="7256"/>
         <source>You installed eric directly from the source code. There is no possibility to check for the availability of an update.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7232"/>
+        <location filename="../UI/UserInterface.py" line="7246"/>
         <source>You are using a snapshot release of eric6. A more up-to-date stable release might be available.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -75992,7 +76127,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5888"/>
+        <location filename="../UI/UserInterface.py" line="5902"/>
         <source>&lt;p&gt;The PySide{0} documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76068,17 +76203,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>Start Web Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6001"/>
+        <location filename="../UI/UserInterface.py" line="6015"/>
         <source>The eric6 web browser could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6062"/>
+        <location filename="../UI/UserInterface.py" line="6076"/>
         <source>&lt;p&gt;The eric6 web browser is not started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76172,6 +76307,11 @@
         <source>Central Park</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3650"/>
+        <source>&lt;h2&gt;Version Numbers&lt;/h2&gt;&lt;table&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UserPropertiesDialog</name>
@@ -76424,7 +76564,7 @@
 <context>
     <name>VariableItem</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="207"/>
+        <location filename="../Debugger/VariablesViewer.py" line="211"/>
         <source>&lt;double click to show value&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76488,22 +76628,22 @@
 <context>
     <name>VariablesModel</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="278"/>
+        <location filename="../Debugger/VariablesViewer.py" line="282"/>
         <source>Globals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="280"/>
+        <location filename="../Debugger/VariablesViewer.py" line="284"/>
         <source>Locals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="282"/>
+        <location filename="../Debugger/VariablesViewer.py" line="286"/>
         <source>Value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76511,32 +76651,32 @@
 <context>
     <name>VariablesViewer</name>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="951"/>
+        <location filename="../Debugger/VariablesViewer.py" line="955"/>
         <source>Global Variables</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="952"/>
+        <location filename="../Debugger/VariablesViewer.py" line="956"/>
         <source>&lt;b&gt;The Global Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the global variables of the debugged program.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="958"/>
+        <location filename="../Debugger/VariablesViewer.py" line="962"/>
         <source>Local Variables</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="959"/>
+        <location filename="../Debugger/VariablesViewer.py" line="963"/>
         <source>&lt;b&gt;The Local Variables Viewer Window&lt;/b&gt;&lt;p&gt;This window displays the local variables of the debugged program.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1076"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
         <source>Show Details...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1091"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1095"/>
         <source>Configure...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76546,30 +76686,35 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1089"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1093"/>
         <source>Refresh</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1078"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1082"/>
         <source>Expand</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1079"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1083"/>
         <source>Collapse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1080"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1084"/>
         <source>Collapse All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/VariablesViewer.py" line="1092"/>
+        <location filename="../Debugger/VariablesViewer.py" line="1096"/>
         <source>Variables Type Filter...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Debugger/VariablesViewer.py" line="47"/>
+        <source>unsized</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VcsCommandOptionsDialog</name>
Binary file eric6/i18n/eric6_es.qm has changed
--- a/eric6/i18n/eric6_es.ts	Fri Nov 01 16:11:55 2019 +0100
+++ b/eric6/i18n/eric6_es.ts	Sun Dec 01 16:38:47 2019 +0100
@@ -1449,32 +1449,32 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="245"/>
         <source>Minimum Severity for message dialog:</source>
-        <translation type="unfinished"></translation>
+        <translation>Severidad mínima para el diálogo de mensaje:</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="258"/>
         <source>Select the minimum message severity shown</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleccionar el mínimo mensaje de severidad mostrado</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="38"/>
         <source>Debug</source>
-        <translation type="unfinished">Depurar</translation>
+        <translation>Depuración</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="39"/>
         <source>Warning</source>
-        <translation type="unfinished">Advertencia</translation>
+        <translation>Advertencia</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="40"/>
         <source>Critical</source>
-        <translation type="unfinished"></translation>
+        <translation>Crítico</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="41"/>
         <source>Fatal Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Error Fatal</translation>
     </message>
 </context>
 <context>
@@ -11669,7 +11669,7 @@
     <message>
         <location filename="../QScintilla/Editor.py" line="1168"/>
         <source>Spell Check Languages</source>
-        <translation type="unfinished"></translation>
+        <translation>Corrección Ortográfica Idiomas</translation>
     </message>
 </context>
 <context>
@@ -12285,7 +12285,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorDocViewerPage.ui" line="37"/>
         <source>Select to enable the display of code documentation</source>
-        <translation>Seleccionar para habilitar la visualizacińo de documentación del código</translation>
+        <translation>Seleccionar para habilitar la visualización de documentación del código</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorDocViewerPage.ui" line="40"/>
@@ -12776,11 +12776,6 @@
         <translation>Archivos HTML</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="690"/>
-        <source>Extensions:</source>
-        <translation type="obsolete">Extensiones:</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="527"/>
         <source>Markdown Files</source>
         <translation>Archivos Markdown</translation>
@@ -12833,68 +12828,69 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="607"/>
         <source>Select to enable the use of the PyMdown extensions</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleccionar para habilitar el uso de extensiones de PyMdown</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="610"/>
         <source>&lt;b&gt;Enable PyMdown Extensions&lt;/b&gt;
 &lt;p&gt;Select this entry to enable the use of the PyMdown extensions. These have to be installed with &lt;code&gt;pip install pymdown-extensions&lt;/code&gt;.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;b&gt;Habilitar Extensiones PyMdown&lt;/b&gt;
+&lt;p&gt;Seleccionar esta entrada para habilitar el uso de extensiones de PyMdown. Éstas deben de estar previamente instaladas con &lt;code&gt;pip install pymdown-extensions&lt;/code&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="614"/>
         <source>Enable PyMdown Extensions</source>
-        <translation type="unfinished"></translation>
+        <translation>Habilitar Extensiones PyMdown</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="583"/>
         <source>Select to enable Math support using MathJax</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleccionar para habilitar soporte de combinación usando MathJax</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="586"/>
         <source>Enable Math support</source>
-        <translation type="unfinished"></translation>
+        <translation>Habilitar soporte para Math</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="593"/>
         <source>Select to enable Graph support using Mermaid</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleccionar para habilitar soporte de Graph usando Mermaid</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="596"/>
         <source>Enable Graph support</source>
-        <translation type="unfinished"></translation>
+        <translation>Habilitar soporte para Graph</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="463"/>
         <source>Refresh Timeout:</source>
-        <translation type="unfinished"></translation>
+        <translation>Tiempo Máximo para Actualizar:</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="470"/>
         <source>Enter the timeout in milliseconds until the preview is refreshed</source>
-        <translation type="unfinished"></translation>
+        <translation>Introducir el tiempo máximo en milisegundos para que la vista preliminar se actualice</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="473"/>
         <source> ms</source>
-        <translation type="unfinished"> ms</translation>
+        <translation> ms</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="717"/>
         <source>File Extensions:</source>
-        <translation type="unfinished"></translation>
+        <translation>Extensiones de Archivo:</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="621"/>
         <source>Press to install the PyMdown extensions</source>
-        <translation type="unfinished"></translation>
+        <translation>Pulsar para instalar las extensiones de PyMdown</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="624"/>
         <source>Install PyMdown Extensions</source>
-        <translation type="unfinished"></translation>
+        <translation>Instalar Exetnsiones PyMdown</translation>
     </message>
 </context>
 <context>
@@ -14434,28 +14430,29 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="129"/>
         <source>Select to perform a complete check of files without extension</source>
-        <translation type="unfinished"></translation>
+        <translation>Seleccionar para llevar a cabo una comprobación completa de archivos sin extensión</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="132"/>
         <source>Spell check unknown files</source>
-        <translation type="unfinished"></translation>
+        <translation>Corrección ortográfica de archivos desconocidos</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="192"/>
         <source>Textfiles:</source>
-        <translation type="unfinished"></translation>
+        <translation>Archivos de Texto:</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="199"/>
         <source>Enter the file extensions of pure text files (separated by a space)</source>
-        <translation type="unfinished"></translation>
+        <translation>Introducir las extensiones de archivo para archivos de texto plano (separadas por un espacio)</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorSpellCheckingPage.ui" line="202"/>
         <source>&lt;b&gt;Textfiles&lt;/b&gt;
 &lt;p&gt;Enter the file extension of pure text files. The complete contents of files with these extensions will be checked.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>&lt;b&gt;Archivos de Texto&lt;/b&gt;
+&lt;p&gt;Introducir las extensiones de archivo para archivos de texto plano. Se comprobará el contenido completo de archivos con estas extensiones.&lt;/p&gt;</translation>
     </message>
 </context>
 <context>
@@ -16946,52 +16943,52 @@
 <context>
     <name>EspDevice</name>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="67"/>
+        <location filename="../MicroPython/EspDevices.py" line="77"/>
         <source>ESP8266, ESP32</source>
         <translation>ESP8266, ESP32</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="160"/>
+        <location filename="../MicroPython/EspDevices.py" line="170"/>
         <source>Erase Flash</source>
         <translation>Borrar Flash</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="193"/>
+        <location filename="../MicroPython/EspDevices.py" line="203"/>
         <source>Flash MicroPython Firmware</source>
         <translation>Flash MicroPython Firmware</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="217"/>
+        <location filename="../MicroPython/EspDevices.py" line="227"/>
         <source>Flash Additional Firmware</source>
         <translation>Flash Additional Firmware</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="141"/>
+        <location filename="../MicroPython/EspDevices.py" line="151"/>
         <source>Install &apos;esptool.py&apos;</source>
         <translation>Instalar &apos;esptool.py&apos;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="148"/>
+        <location filename="../MicroPython/EspDevices.py" line="158"/>
         <source>Shall the flash of the selected device really be erased?</source>
         <translation>¿Borrar el flash del dispositivo seleccionado?</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="160"/>
+        <location filename="../MicroPython/EspDevices.py" line="170"/>
         <source>&apos;esptool erase_flash&apos; Output</source>
         <translation>Salida de &apos;esptool erase_flash&apos;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="182"/>
+        <location filename="../MicroPython/EspDevices.py" line="192"/>
         <source>Unsupported chip type &apos;{0}&apos;.</source>
         <translation>Tipo de chip no soportado &apos;{0}&apos;.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="217"/>
+        <location filename="../MicroPython/EspDevices.py" line="227"/>
         <source>&apos;esptool write_flash&apos; Output</source>
         <translation>Salida de &apos;esptool write_flash&apos;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/EspDevices.py" line="139"/>
+        <location filename="../MicroPython/EspDevices.py" line="149"/>
         <source>Reset Device</source>
         <translation>Resetear Dispositivo</translation>
     </message>
@@ -21697,11 +21694,6 @@
         <translation>Introducir el número de caracteres del subject del commit a mostrar en la lista</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui" line="14"/>
-        <source>Select to perform an expensive copy detection</source>
-        <translation type="obsolete">Seleccionar para llevar a cabo detección de copia costosa</translation>
-    </message>
-    <message>
         <location filename="../Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui" line="95"/>
         <source>All</source>
         <translation>Todo</translation>
@@ -44020,44 +44012,79 @@
         <translation>Introducir la ruta del ejecutable del compilador multiplataforma</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="39"/>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="42"/>
         <source>All Files (*)</source>
         <translation>Todos los archivos (*)</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="255"/>
+        <source>Documentation</source>
+        <translation>Documentación</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="261"/>
+        <source>MicroPython:</source>
+        <translation>MicroPython:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="268"/>
+        <source>Enter the URL for the MicroPython documentation</source>
+        <translation>Introducir la URL para la documentación de MicroPython</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="275"/>
+        <source>CircuitPython:</source>
+        <translation>CircuitPython:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="282"/>
+        <source>Enter the URL for the CircuitPython documentation</source>
+        <translation>Introducir la URL para la documentación de CircuitPython</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="289"/>
+        <source>BBC micro:bit:</source>
+        <translation>BBC micro:bit:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="296"/>
+        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
+        <translation>Intrroducir la URL para la documentación BBC micro:bit MicroPython</translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="172"/>
-        <source>Documentation</source>
-        <translation>Documentación</translation>
+        <source>PyBoard</source>
+        <translation>PyBoard</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="178"/>
-        <source>MicroPython:</source>
-        <translation>MicroPython:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="185"/>
-        <source>Enter the URL for the MicroPython documentation</source>
-        <translation>Introducir la URL para la documentación de MicroPython</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="192"/>
-        <source>CircuitPython:</source>
-        <translation>CircuitPython:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="199"/>
-        <source>Enter the URL for the CircuitPython documentation</source>
-        <translation>Introducir la URL para la documentación de CircuitPython</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="206"/>
-        <source>BBC micro:bit:</source>
-        <translation>BBC micro:bit:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="213"/>
-        <source>Enter the URL for the BBC micro:bit MicroPython documentation</source>
-        <translation>Intrroducir la URL para la documentación BBC micro:bit MicroPython</translation>
+        <source>dfu-util Path:</source>
+        <translation>dfu-util Path:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="194"/>
+        <source>Enter the path of the dfu-util flashing executable</source>
+        <translation>Introducir la ruta del ejecutable para la utilidad de flasheo dfu</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="204"/>
+        <source>Firmware</source>
+        <translation>Firmware</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="217"/>
+        <source>Enter the URL for the MicroPython firmware for PyBoard, ESP8266 and ESP32</source>
+        <translation>Introducir la URL para el firmware de MicroPython firmware para PyBoard, ESP8266 y ESP32</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="231"/>
+        <source>Enter the URL for the CircuitPython firmware</source>
+        <translation>Introducir la ruta del archivo de firmware CircuitPython</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="245"/>
+        <source>Enter the URL for the BBC micro:bit Firmware</source>
+        <translation>Introducir la ruta del archivo de firmware BBC micro:bit</translation>
     </message>
 </context>
 <context>
@@ -44257,7 +44284,7 @@
         <translation>Mostrar Implementación</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>Synchronize Time</source>
         <translation>Sincronizar Hora</translation>
     </message>
@@ -44272,107 +44299,107 @@
         <translation>Mostrar Hora Local</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1366"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1421"/>
         <source>Compile Python File</source>
         <translation>Compilar Archivo de Python</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1386"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1441"/>
         <source>Compile Current Editor</source>
         <translation>Compilar Editor Actual</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1140"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1148"/>
         <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
         <translation>&lt;h3&gt;Información de Versión de Dispositivo&lt;/h3&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1149"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1157"/>
         <source>No version information available.</source>
         <translation>No hay información de versión disponible.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1151"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1159"/>
         <source>Device Version Information</source>
         <translation>Información de Versión de Dispositivo</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1174"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1182"/>
         <source>unknown</source>
         <translation>desconocido</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>Device Implementation Information</source>
         <translation>Información de Implementación de Dispositivo</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1178"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1186"/>
         <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;h3&gt;Información de Implementación de Dispositivo &lt;/h3&gt;&lt;p&gt;Este dispositivo contiene &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1202"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1210"/>
         <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
         <translation>&lt;p&gt;La hora del dispositivo conectado está sincronizada con la hora local.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1224"/>
-        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-        <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1232"/>
+        <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1240"/>
         <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
         <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1246"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1254"/>
         <source>Device Date and Time</source>
         <translation>Fecha y Hora del Dispositivo</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>Local Date and Time</source>
         <translation>Fecha y Hora Local</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1259"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1267"/>
         <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
         <translation>&lt;h3&gt;Fecha y Hora del Local&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>Error handling device</source>
         <translation>Error de gestión del dispositivo</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1279"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1334"/>
         <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Ha ocurrido un error al comunicar con el dispositivo conectado.&lt;/p&gt;&lt;p&gt;Método: {0}&lt;/p&gt;&lt;p&gt;Mensaje: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1318"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1373"/>
         <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
         <translation>El compilador multiplataforma de MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; no se encuentra. Asegúrese de que está en la ruta de búsqueda o configurarlo en la página de configuración de MicroPython.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1336"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1391"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1346"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1401"/>
         <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
         <translation>El archivo de Python &lt;b&gt;{0}&lt;/b&gt; no existe. Abortando...</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1356"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1411"/>
         <source>&apos;mpy-cross&apos; Output</source>
         <translation>Salida de &apos;mpy-cross&apos;</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1379"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1434"/>
         <source>The current editor does not contain a Python file. Aborting...</source>
         <translation>El editor actual no contiene un archivo de Python. Abortando...</translation>
     </message>
@@ -44397,14 +44424,39 @@
         <translation>Archivos µPy</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicroPythonWidget.py" line="1126"/>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1134"/>
         <source>Show Documentation</source>
         <translation>Mostrar Documentación</translation>
     </message>
     <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1138"/>
+        <source>Configure</source>
+        <translation>Configurar</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1113"/>
+        <source>Show Time</source>
+        <translation>Mostrar Tiempo</translation>
+    </message>
+    <message>
         <location filename="../MicroPython/MicroPythonWidget.py" line="1130"/>
-        <source>Configure</source>
-        <translation>Configurar</translation>
+        <source>Download Firmware</source>
+        <translation>Descargar Firmware</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>Date and Time</source>
+        <translation>Fecha y Hora</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1293"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{0}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/MicroPythonWidget.py" line="1310"/>
+        <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+        <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align=&apos;center&apos;&gt;{0} {1}&lt;/td&gt;&lt;td align=&apos;center&apos;&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
 </context>
 <context>
@@ -44429,26 +44481,6 @@
 Por favor, asegúrese de que el dispositivo está conectado a este ordenador.</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="218"/>
-        <source>Flash Default MicroPython Firmware</source>
-        <translation type="obsolete">Flashear Firmware por defecto de CircuitPython</translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="207"/>
-        <source>Flash Custom MicroPython Firmware</source>
-        <translation type="obsolete">Flashear Firmware personalizado de CircuitPython</translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="258"/>
-        <source>Flash Script</source>
-        <translation type="obsolete">Flashear Script</translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="171"/>
-        <source>Flash the current script to the selected device.</source>
-        <translation type="obsolete">Flashear el archivo actual al dispositivo seleccionado.</translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="171"/>
         <source>Save Script as &apos;main.py&apos;</source>
         <translation>Guardar Script como &apos;main.py&apos;</translation>
@@ -44464,26 +44496,11 @@
         <translation>Restablecer micro:bit</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="183"/>
-        <source>Install &apos;uflash&apos;</source>
-        <translation type="obsolete">Instalar &apos;uflash&apos;</translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="258"/>
-        <source>&apos;uflash&apos; Output</source>
-        <translation type="obsolete">Salida de &apos;uflash&apos;</translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="201"/>
         <source>MicroPython Firmware Files (*.hex);;All Files (*)</source>
         <translation>Archivos de Firmware MicroPython (*.hex);;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="../MicroPython/MicrobitDevices.py" line="235"/>
-        <source>The current editor does not contain a Python script. Flash it anyway?</source>
-        <translation type="obsolete">El editor actual no contiene un script Python. ¿Flashear de todos modos?</translation>
-    </message>
-    <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="246"/>
         <source>The script is empty. Aborting.</source>
         <translation>Script vacío. Abortando.</translation>
@@ -44501,32 +44518,32 @@
     <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="201"/>
         <source>Flash MicroPython Firmware</source>
-        <translation type="unfinished">Flash MicroPython Firmware</translation>
+        <translation>Flash MicroPython Firmware</translation>
     </message>
     <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="233"/>
         <source>Save Script</source>
-        <translation type="unfinished"></translation>
+        <translation>Guardar Script</translation>
     </message>
     <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="190"/>
         <source>The BBC micro:bit is not ready for flashing. See the &lt;a href=&quot;https://microbit.org/guide/firmware/&quot;&gt;micro:bit web site&lt;/a&gt; for details.</source>
-        <translation type="unfinished"></translation>
+        <translation>El BBC micro:bit no está listo para flashing. Ver en el &lt;a href=&quot;https://microbit.org/guide/firmware/&quot;&gt;sitio web de micro:bit&lt;/a&gt; más detalles.</translation>
     </message>
     <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="263"/>
         <source>Save Script as &apos;{0}&apos;</source>
-        <translation type="unfinished"></translation>
+        <translation>Guardar Script como &apos;{0}&apos;</translation>
     </message>
     <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="254"/>
         <source>Enter a file name on the device:</source>
-        <translation type="unfinished"></translation>
+        <translation>Introducir un nombre de archivo para el dispositivo:</translation>
     </message>
     <message>
         <location filename="../MicroPython/MicrobitDevices.py" line="168"/>
         <source>Save the current script to the selected device</source>
-        <translation type="unfinished"></translation>
+        <translation>Guardar el script actual en el dispositivo seleccionado</translation>
     </message>
 </context>
 <context>
@@ -49687,17 +49704,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1606"/>
+        <location filename="../Preferences/__init__.py" line="1610"/>
         <source>Export Preferences</source>
         <translation>Exportar Preferencias</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Import Preferences</source>
         <translation>Importar Preferencias</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1634"/>
+        <location filename="../Preferences/__init__.py" line="1638"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
     </message>
@@ -50040,22 +50057,22 @@
         <translation>Compilador CORBA IDL</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="361"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="378"/>
         <source>(not configured)</source>
         <translation>(no configurado)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="415"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="432"/>
         <source>(not executable)</source>
         <translation>(no ejecutable)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="452"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="469"/>
         <source>(not found)</source>
         <translation>(no encontrado)</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="413"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="430"/>
         <source>(unknown)</source>
         <translation>(desconocido)</translation>
     </message>
@@ -50145,7 +50162,7 @@
         <translation>Compilador gRPC</translation>
     </message>
     <message>
-        <location filename="../Preferences/ProgramsDialog.py" line="394"/>
+        <location filename="../Preferences/ProgramsDialog.py" line="411"/>
         <source>(module not found)</source>
         <translation>(módule no encontrado)</translation>
     </message>
@@ -50174,6 +50191,21 @@
         <source>PyPI Package Management</source>
         <translation>Gestor de Packages PyPI</translation>
     </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="297"/>
+        <source>MicroPython - MPY Cross Compiler</source>
+        <translation>MicroPython - MPY Cross Compiler</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="300"/>
+        <source>MicroPython - ESP Tool</source>
+        <translation>MicroPython - ESP Tool</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ProgramsDialog.py" line="306"/>
+        <source>MicroPython - PyBoard Flasher</source>
+        <translation>MicroPython - PyBoard Flasher</translation>
+    </message>
 </context>
 <context>
     <name>Project</name>
@@ -53701,24 +53733,89 @@
 <context>
     <name>PyBoardDevice</name>
     <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="70"/>
+        <location filename="../MicroPython/PyBoardDevices.py" line="75"/>
         <source>PyBoard</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <translation>PyBoard</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Workspace Directory</source>
-        <translation type="unfinished">Directorio del espacio de trabajo</translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="159"/>
+        <translation>Directorio del Workspace</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="164"/>
         <source>Python files for PyBoard devices are stored on the device. Therefore, to edit these files you need to have the device plugged in. Until you plug in a device, the standard directory will be used.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../MicroPython/PyBoardDevices.py" line="186"/>
-        <source>MicroPython Install Instructions</source>
-        <translation type="unfinished"></translation>
+        <translation>Los archivos de Python  para dispositivos PyBoard se almacenan en el dispositivo. Por tanto, para editar esos archivos se necesita tener el dispositivo conectado. Hasta que se conecte un dispositivo, se utilizará el directorio estándar.</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="202"/>
+        <source>List DFU-capable Devices</source>
+        <translation>Listar Dispositivos con capacidad DFU</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>Flash MicroPython Firmware</source>
+        <translation>Flash MicroPython Firmware</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="209"/>
+        <source>MicroPython Flash Instructions</source>
+        <translation>Instrucciones para MicroPython Flash</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>dfu-util not available</source>
+        <translation>dfu-util no está disponible</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="239"/>
+        <source>The dfu-util firmware flashing tool &lt;b&gt;dfu-util&lt;/b&gt; cannot be found or is not executable. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+        <translation>La herramienta de firmware de flasheo dfu-util &lt;b&gt;dfu-util&lt;/b&gt; no se encuentra o no es ejecutable. Asegure que está en la ruta de búsqueda o configure su valor en la página de configuración de MicroPython.</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="260"/>
+        <source>&lt;h3&gt;Enable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect everything from your board&lt;/p&gt;&lt;p&gt;2. Disconnect your board&lt;/p&gt;&lt;p&gt;3. Connect the DFU/BOOT0 pin with a 3.3V pin&lt;/p&gt;&lt;p&gt;4. Re-connect your board&lt;/p&gt;&lt;hr /&gt;</source>
+        <translation>&lt;h3&gt;Habilitar Modo DFU&lt;/h3&gt;&lt;p&gt;1. Desconectar todo de la placa&lt;/p&gt;&lt;p&gt;2. Desconectar la placa&lt;/p&gt;&lt;p&gt;3. Conectar el pin DFU/BOOT0 con un pin de 3.3V pin&lt;/p&gt;&lt;p&gt;4. Reconectar la placa&lt;/p&gt;&lt;hr /&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="270"/>
+        <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Make sure that all other DFU capable devices except your PyBoard are disconnected.&lt;hr /&gt;</source>
+        <translation>&lt;p&gt;&lt;b&gt;Aviso:&lt;/b&gt; Asegurar que todos los demás dispositivos con capacidad DFU -a excepción del PyBoard- están desconectados.&lt;hr /&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="276"/>
+        <source>&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Pulsar &lt;b&gt;OK&lt;/b&gt; para continuar...&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="279"/>
+        <source>Enable DFU mode</source>
+        <translation>Habilitar modo DFU</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="293"/>
+        <source>&lt;h3&gt;Disable DFU Mode&lt;/h3&gt;&lt;p&gt;1. Disconnect your board&lt;/p&gt;&lt;p&gt;2. Remove the DFU jumper&lt;/p&gt;&lt;p&gt;3. Re-connect your board&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Press &lt;b&gt;OK&lt;/b&gt; to continue...&lt;/p&gt;</source>
+        <translation>&lt;h3&gt;Desabilitar Modo DFU&lt;/h3&gt;&lt;p&gt;1. Desconectar la placa&lt;/p&gt;&lt;p&gt;2. Sacar el jumper DFU&lt;/p&gt;&lt;p&gt;3. Reconectar la placa&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;Pulsar &lt;b&gt;OK&lt;/b&gt; para continuar...&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="301"/>
+        <source>Disable DFU mode</source>
+        <translation>Deshabilitar modo DFU</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="356"/>
+        <source>&apos;dfu-util&apos; Output</source>
+        <translation>Salida de &apos;dfu-util&apos;</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="322"/>
+        <source>List DFU capable Devices</source>
+        <translation>Listar Dispositivos con capacidad DFU</translation>
+    </message>
+    <message>
+        <location filename="../MicroPython/PyBoardDevices.py" line="344"/>
+        <source>MicroPython Firmware Files (*.dfu);;All Files (*)</source>
+        <translation>Archivos de Firmware MicroPython (*.dfu);;Todos los Archivos (*)</translation>
     </message>
 </context>
 <context>
@@ -70246,6 +70343,16 @@
         <source>JavaScript batch check</source>
         <translation>Javascript comprobación por lotes</translation>
     </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="256"/>
+        <source>YAML batch check</source>
+        <translation>YAML comprobación por lotes</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="272"/>
+        <source>JSON batch check</source>
+        <translation>JSON comprobación por lotes</translation>
+    </message>
 </context>
 <context>
     <name>SyntaxCheckerDialog</name>
@@ -70357,22 +70464,22 @@
 <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="247"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="267"/>
         <source>Check Syntax</source>
         <translation>Verificar sintaxis</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="247"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="267"/>
         <source>&amp;Syntax...</source>
         <translation>&amp;Sintaxis...</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="156"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="176"/>
         <source>Check syntax.</source>
         <translation>Verificar sintaxis.</translation><