--- a/src/eric7/MicroPython/MicrobitDevices.py Sat Feb 11 16:59:50 2023 +0100 +++ b/src/eric7/MicroPython/MicrobitDevices.py Sat Feb 11 19:52:53 2023 +0100 @@ -14,7 +14,7 @@ from PyQt6.QtCore import QStandardPaths, QUrl, pyqtSlot from PyQt6.QtNetwork import QNetworkRequest -from PyQt6.QtWidgets import QInputDialog, QLineEdit +from PyQt6.QtWidgets import QInputDialog, QLineEdit, QMenu from eric7 import Globals, Preferences from eric7.EricWidgets import EricFileDialog, EricMessageBox @@ -50,6 +50,8 @@ with contextlib.suppress(ValueError): self.__boardId = int(serialNumber[:4], 16) + self.__createMicrobitMenu() + def setButtons(self): """ Public method to enable the supported action buttons. @@ -178,6 +180,40 @@ """ return self.__boardId in (0x12A0,) + def __createMicrobitMenu(self): + """ + Private method to create the microbit submenu. + """ + self.__microbitMenu = QMenu(self.tr("BBC micro:bit/Calliope Functions")) + + self.__showMpyAct = self.__microbitMenu.addAction( + self.tr("Show MicroPython Versions"), self.__showFirmwareVersions + ) + self.__microbitMenu.addSeparator() + self.__flashMpyAct = self.__microbitMenu.addAction( + self.tr("Flash MicroPython"), self.__flashMicroPython + ) + self.__flashDAPLinkAct = self.__microbitMenu.addAction( + self.tr("Flash Firmware"), lambda: self.__flashMicroPython(firmware=True) + ) + self.__microbitMenu.addSeparator() + self.__saveScripAct = self.__microbitMenu.addAction( + self.tr("Save Script"), self.__saveScriptToDevice + ) + self.__saveScripAct.setToolTip( + self.tr("Save the current script to the selected device") + ) + self.__saveMainScriptAct = self.__microbitMenu.addAction( + self.tr("Save Script as 'main.py'"), self.__saveMain + ) + self.__saveMainScriptAct.setToolTip( + self.tr("Save the current script as 'main.py' on the connected device") + ) + self.__microbitMenu.addSeparator() + self.__resetAct = self.__microbitMenu.addAction( + self.tr("Reset {0}").format(self.deviceName()), self.__resetDevice + ) + def addDeviceMenuEntries(self, menu): """ Public method to add device specific entries to the given menu. @@ -188,28 +224,14 @@ connected = self.microPython.isConnected() linkConnected = self.microPython.isLinkConnected() - menu.addAction( - self.tr("Show MicroPython Versions"), self.__showFirmwareVersions - ).setEnabled(connected and self.getDeviceType() != "calliope") - menu.addAction( - self.tr("Flash MicroPython"), self.__flashMicroPython - ).setEnabled(not linkConnected) - menu.addAction( - self.tr("Flash Firmware"), lambda: self.__flashMicroPython(firmware=True) - ).setEnabled(not linkConnected) - menu.addSeparator() - act = menu.addAction(self.tr("Save Script"), self.__saveScriptToDevice) - act.setToolTip(self.tr("Save the current script to the selected device")) - act.setEnabled(connected) - act = menu.addAction(self.tr("Save Script as 'main.py'"), self.__saveMain) - act.setToolTip( - self.tr("Save the current script as 'main.py' on the connected device") - ) - act.setEnabled(connected) - menu.addSeparator() - menu.addAction( - self.tr("Reset {0}").format(self.deviceName()), self.__resetDevice - ).setEnabled(connected) + self.__showMpyAct.setEnabled(connected and self.getDeviceType() != "calliope") + self.__flashMpyAct.setEnabled(not linkConnected) + self.__flashDAPLinkAct.setEnabled(not linkConnected) + self.__saveScripAct.setEnabled(connected) + self.__saveMainScriptAct.setEnabled(connected) + self.__resetAct.setEnabled(connected) + + menu.addMenu(self.__microbitMenu) def hasFlashMenuEntry(self): """