diff --git a/arduino-ide-extension/src/browser/arduino-commands.ts b/arduino-ide-extension/src/browser/arduino-commands.ts index 85181ff0..ff22d3f8 100644 --- a/arduino-ide-extension/src/browser/arduino-commands.ts +++ b/arduino-ide-extension/src/browser/arduino-commands.ts @@ -1,17 +1,14 @@ import { Command } from '@theia/core/lib/common/command'; +/** + * @deprecated all these commands should go under contributions and have their command, menu, keybinding, and toolbar contributions. + */ export namespace ArduinoCommands { - const category = 'Arduino'; - export const TOGGLE_COMPILE_FOR_DEBUG: Command = { id: 'arduino-toggle-compile-for-debug' }; - export const OPEN_FILE_NAVIGATOR: Command = { - id: 'arduino-open-file-navigator' - }; - /** * Unlike `OPEN_SKETCH`, it opens all files from a sketch folder. (ino, cpp, etc...) */ @@ -30,10 +27,4 @@ export namespace ArduinoCommands { id: 'arduino-toggle-advanced-mode-toolbar' }; - export const OPEN_CLI_CONFIG: Command = { - id: 'arduino-open-cli-config', - label: 'Open CLI Configuration', - category - }; - } diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 2e3b72be..9b595384 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -12,7 +12,7 @@ import { ArduinoToolbar } from './toolbar/arduino-toolbar'; import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser'; import { ContextMenuRenderer, StatusBar, StatusBarAlignment, FrontendApplicationContribution, - FrontendApplication, KeybindingContribution, KeybindingRegistry, OpenerService, open + FrontendApplication, KeybindingContribution, KeybindingRegistry, OpenerService } from '@theia/core/lib/browser'; import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog'; import { FileSystem } from '@theia/filesystem/lib/common'; @@ -228,9 +228,6 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut isToggled: () => this.editorMode.proMode, execute: () => this.editorMode.toggleProMode() }); - registry.registerCommand(ArduinoCommands.OPEN_CLI_CONFIG, { - execute: () => this.configService.getCliConfigFileUri().then(uri => open(this.openerService, new URI(uri))) - }); } registerMenus(registry: MenuModelRegistry) { diff --git a/arduino-ide-extension/src/browser/boards/boards-data-menu-updater.ts b/arduino-ide-extension/src/browser/boards/boards-data-menu-updater.ts index 64767fc3..3e6f524f 100644 --- a/arduino-ide-extension/src/browser/boards/boards-data-menu-updater.ts +++ b/arduino-ide-extension/src/browser/boards/boards-data-menu-updater.ts @@ -29,10 +29,10 @@ export class BoardsDataMenuUpdater implements FrontendApplicationContribution { protected readonly toDisposeOnBoardChange = new DisposableCollection(); - onStart(): void { - this.boardsDataStore.onChanged(() => this.updateMenuActions(this.boardsServiceClient.boardsConfig.selectedBoard)); - this.boardsServiceClient.onBoardsConfigChanged(({ selectedBoard }) => this.updateMenuActions(selectedBoard)); - this.updateMenuActions(this.boardsServiceClient.boardsConfig.selectedBoard); + async onStart(): Promise { + await this.updateMenuActions(this.boardsServiceClient.boardsConfig.selectedBoard); + this.boardsDataStore.onChanged(async () => await this.updateMenuActions(this.boardsServiceClient.boardsConfig.selectedBoard)); + this.boardsServiceClient.onBoardsConfigChanged(async ({ selectedBoard }) => await this.updateMenuActions(selectedBoard)); } protected async updateMenuActions(selectedBoard: Board | undefined): Promise { @@ -43,7 +43,7 @@ export class BoardsDataMenuUpdater implements FrontendApplicationContribution { if (fqbn) { const { configOptions, programmers, selectedProgrammer } = await this.boardsDataStore.getData(fqbn); if (configOptions.length) { - const boardsConfigMenuPath = [...ArduinoMenus.TOOLS, 'z01_boardsConfig']; // `z_` is for ordering. + const boardsConfigMenuPath = [...ArduinoMenus.TOOLS__BOARD_SETTINGS_GROUP, 'z01_boardsConfig']; // `z_` is for ordering. for (const { label, option, values } of configOptions.sort(ConfigOption.LABEL_COMPARATOR)) { const menuPath = [...boardsConfigMenuPath, `${option}`]; const commands = new Map() @@ -70,9 +70,10 @@ export class BoardsDataMenuUpdater implements FrontendApplicationContribution { } } if (programmers.length) { - const programmersMenuPath = [...ArduinoMenus.TOOLS, 'z02_programmers']; + const programmersMenuPath = [...ArduinoMenus.TOOLS__BOARD_SETTINGS_GROUP, 'z02_programmers']; const label = selectedProgrammer ? `Programmer: "${selectedProgrammer.name}"` : 'Programmer' this.menuRegistry.registerSubmenu(programmersMenuPath, label); + this.toDisposeOnBoardChange.push(Disposable.create(() => this.unregisterSubmenu(programmersMenuPath))); for (const programmer of programmers) { const { id, name } = programmer; const command = { id: `${fqbn}-programmer--${id}` }; @@ -81,10 +82,10 @@ export class BoardsDataMenuUpdater implements FrontendApplicationContribution { isToggled: () => Programmer.equals(programmer, selectedProgrammer) }; this.menuRegistry.registerMenuAction(programmersMenuPath, { commandId: command.id, label: name }); + this.commandRegistry.registerCommand(command, handler); this.toDisposeOnBoardChange.pushAll([ - this.commandRegistry.registerCommand(command, handler), - Disposable.create(() => this.unregisterSubmenu(programmersMenuPath)), - Disposable.create(() => this.menuRegistry.unregisterMenuAction(command, programmersMenuPath)) + Disposable.create(() => this.commandRegistry.unregisterCommand(command)), + Disposable.create(() => this.menuRegistry.unregisterMenuAction(command.id)) ]); } } diff --git a/arduino-ide-extension/src/browser/boards/boards-widget-frontend-contribution.ts b/arduino-ide-extension/src/browser/boards/boards-widget-frontend-contribution.ts index f5488e0c..9117081e 100644 --- a/arduino-ide-extension/src/browser/boards/boards-widget-frontend-contribution.ts +++ b/arduino-ide-extension/src/browser/boards/boards-widget-frontend-contribution.ts @@ -19,7 +19,7 @@ export class BoardsListWidgetFrontendContribution extends ListWidgetFrontendCont rank: 600 }, toggleCommandId: BoardsListWidgetFrontendContribution.OPEN_MANAGER, - toggleKeybinding: 'ctrlcmd+shift+b' + toggleKeybinding: 'CtrlCmd+Shift+B' }); } @@ -29,7 +29,7 @@ export class BoardsListWidgetFrontendContribution extends ListWidgetFrontendCont registerMenus(menus: MenuModelRegistry): void { if (this.toggleCommand) { - menus.registerMenuAction(ArduinoMenus.TOOLS, { + menus.registerMenuAction(ArduinoMenus.TOOLS__MAIN_GROUP, { commandId: this.toggleCommand.id, label: 'Boards Manager...', order: '4' diff --git a/arduino-ide-extension/src/browser/config-service-client-impl.ts b/arduino-ide-extension/src/browser/config-service-client-impl.ts index e8ca9cf9..6351bb59 100644 --- a/arduino-ide-extension/src/browser/config-service-client-impl.ts +++ b/arduino-ide-extension/src/browser/config-service-client-impl.ts @@ -4,7 +4,7 @@ import { Event, Emitter } from '@theia/core/lib/common/event'; import { CommandService } from '@theia/core/lib/common/command'; import { MessageService } from '@theia/core/lib/common/message-service'; import { ConfigServiceClient, Config } from '../common/protocol'; -import { ArduinoCommands } from './arduino-commands'; +import { Settings } from './contributions/settings'; @injectable() export class ConfigServiceClientImpl implements ConfigServiceClient { @@ -32,7 +32,7 @@ export class ConfigServiceClientImpl implements ConfigServiceClient { this.invalidConfigPopup = this.messageService.error(`Your CLI configuration is invalid. Do you want to correct it now?`, 'No', 'Yes') .then(answer => { if (answer === 'Yes') { - this.commandService.executeCommand(ArduinoCommands.OPEN_CLI_CONFIG.id) + this.commandService.executeCommand(Settings.Commands.OPEN_CLI_CONFIG.id) } this.invalidConfigPopup = undefined; }) diff --git a/arduino-ide-extension/src/browser/library/library-widget-frontend-contribution.ts b/arduino-ide-extension/src/browser/library/library-widget-frontend-contribution.ts index 1d2a74b8..eb87dd19 100644 --- a/arduino-ide-extension/src/browser/library/library-widget-frontend-contribution.ts +++ b/arduino-ide-extension/src/browser/library/library-widget-frontend-contribution.ts @@ -27,7 +27,7 @@ export class LibraryListWidgetFrontendContribution extends AbstractViewContribut registerMenus(menus: MenuModelRegistry): void { if (this.toggleCommand) { - menus.registerMenuAction(ArduinoMenus.TOOLS, { + menus.registerMenuAction(ArduinoMenus.TOOLS__MAIN_GROUP, { commandId: this.toggleCommand.id, label: 'Manage Libraries...', order: '3' diff --git a/arduino-ide-extension/src/browser/menu/arduino-menus.ts b/arduino-ide-extension/src/browser/menu/arduino-menus.ts index f0a8467d..471de834 100644 --- a/arduino-ide-extension/src/browser/menu/arduino-menus.ts +++ b/arduino-ide-extension/src/browser/menu/arduino-menus.ts @@ -28,7 +28,10 @@ export namespace ArduinoMenus { // -- Tools export const TOOLS = [...MAIN_MENU_BAR, '4_tools']; + // `Auto Format`, `Library Manager...`, `Boards Manager...` export const TOOLS__MAIN_GROUP = [...TOOLS, '0_main']; + // Core settings, such as `Processor` and `Programmers` for the board. + export const TOOLS__BOARD_SETTINGS_GROUP = [...TOOLS, '1_board_settings']; // Context menu // -- Open diff --git a/arduino-ide-extension/src/browser/monitor/monitor-view-contribution.tsx b/arduino-ide-extension/src/browser/monitor/monitor-view-contribution.tsx index e2a25dfa..a37cd38d 100644 --- a/arduino-ide-extension/src/browser/monitor/monitor-view-contribution.tsx +++ b/arduino-ide-extension/src/browser/monitor/monitor-view-contribution.tsx @@ -42,13 +42,13 @@ export class MonitorViewContribution extends AbstractViewContribution