Merge pull request #92 from bcmi-labs/arduino-pro-ide_17

Updated keybindings
This commit is contained in:
Miro Spönemann 2020-01-13 09:14:24 +01:00 committed by GitHub
commit 8839e318f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 48 deletions

View File

@ -9,29 +9,19 @@ import { BoardsService } from '../common/protocol/boards-service';
import { ArduinoCommands } from './arduino-commands'; import { ArduinoCommands } from './arduino-commands';
import { CoreService } from '../common/protocol/core-service'; import { CoreService } from '../common/protocol/core-service';
import { WorkspaceServiceExt } from './workspace-service-ext'; import { WorkspaceServiceExt } from './workspace-service-ext';
import { ToolOutputServiceClient } from '../common/protocol/tool-output-service';
import { QuickPickService } from '@theia/core/lib/common/quick-pick-service';
import { BoardsListWidgetFrontendContribution } from './boards/boards-widget-frontend-contribution';
import { BoardsServiceClientImpl } from './boards/boards-service-client-impl'; import { BoardsServiceClientImpl } from './boards/boards-service-client-impl';
import { WorkspaceRootUriAwareCommandHandler, WorkspaceCommands } from '@theia/workspace/lib/browser/workspace-commands'; import { WorkspaceRootUriAwareCommandHandler, WorkspaceCommands } from '@theia/workspace/lib/browser/workspace-commands';
import { SelectionService, MenuContribution, MenuModelRegistry, MAIN_MENU_BAR, MenuPath } from '@theia/core'; import { SelectionService, MenuContribution, MenuModelRegistry, MAIN_MENU_BAR, MenuPath } from '@theia/core';
import { ArduinoToolbar } from './toolbar/arduino-toolbar'; import { ArduinoToolbar } from './toolbar/arduino-toolbar';
import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser'; import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser';
import { import {
ContextMenuRenderer, ContextMenuRenderer, Widget, StatusBar, StatusBarAlignment, FrontendApplicationContribution,
OpenerService, FrontendApplication, KeybindingContribution, KeybindingRegistry
Widget,
StatusBar,
StatusBarAlignment,
QuickOpenService,
ApplicationShell,
FrontendApplicationContribution,
FrontendApplication
} from '@theia/core/lib/browser'; } from '@theia/core/lib/browser';
import { OpenFileDialogProps, FileDialogService } from '@theia/filesystem/lib/browser/file-dialog'; import { OpenFileDialogProps, FileDialogService } from '@theia/filesystem/lib/browser/file-dialog';
import { FileSystem, FileStat } from '@theia/filesystem/lib/common'; import { FileSystem, FileStat } from '@theia/filesystem/lib/common';
import { Sketch, SketchesService } from '../common/protocol/sketches-service'; import { Sketch, SketchesService } from '../common/protocol/sketches-service';
import { WindowService } from '@theia/core/lib/browser/window/window-service'; import { ToolOutputServiceClient } from '../common/protocol/tool-output-service';
import { CommonCommands, CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution'; import { CommonCommands, CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
import { FileSystemCommands } from '@theia/filesystem/lib/browser/filesystem-frontend-contribution'; import { FileSystemCommands } from '@theia/filesystem/lib/browser/filesystem-frontend-contribution';
import { FileDownloadCommands } from '@theia/filesystem/lib/browser/download/file-download-command-contribution'; import { FileDownloadCommands } from '@theia/filesystem/lib/browser/download/file-download-command-contribution';
@ -41,17 +31,16 @@ import { MaybePromise } from '@theia/core/lib/common/types';
import { BoardsConfigDialog } from './boards/boards-config-dialog'; import { BoardsConfigDialog } from './boards/boards-config-dialog';
import { BoardsToolBarItem } from './boards/boards-toolbar-item'; import { BoardsToolBarItem } from './boards/boards-toolbar-item';
import { BoardsConfig } from './boards/boards-config'; import { BoardsConfig } from './boards/boards-config';
import { ConfigService } from '../common/protocol/config-service';
import { MonitorConnection } from './monitor/monitor-connection'; import { MonitorConnection } from './monitor/monitor-connection';
import { MonitorViewContribution } from './monitor/monitor-view-contribution'; import { MonitorViewContribution } from './monitor/monitor-view-contribution';
import { ArduinoWorkspaceService } from './arduino-workspace-service'; import { ArduinoWorkspaceService } from './arduino-workspace-service';
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution'; import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution'; import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution';
import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution'; import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
import { FileNavigatorCommands } from '@theia/navigator/lib/browser/navigator-contribution'; import { FileNavigatorCommands } from '@theia/navigator/lib/browser/navigator-contribution';
import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer';
import { EditorMode } from './editor-mode'; import { EditorMode } from './editor-mode';
export namespace ArduinoMenus { export namespace ArduinoMenus {
@ -67,7 +56,8 @@ export namespace ArduinoToolbarContextMenu {
} }
@injectable() @injectable()
export class ArduinoFrontendContribution implements FrontendApplicationContribution, TabBarToolbarContribution, CommandContribution, MenuContribution { export class ArduinoFrontendContribution implements FrontendApplicationContribution,
TabBarToolbarContribution, CommandContribution, MenuContribution, KeybindingContribution {
@inject(MessageService) @inject(MessageService)
protected readonly messageService: MessageService; protected readonly messageService: MessageService;
@ -84,12 +74,6 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
@inject(ToolOutputServiceClient) @inject(ToolOutputServiceClient)
protected readonly toolOutputServiceClient: ToolOutputServiceClient; protected readonly toolOutputServiceClient: ToolOutputServiceClient;
@inject(QuickPickService)
protected readonly quickPickService: QuickPickService;
@inject(BoardsListWidgetFrontendContribution)
protected readonly boardsListWidgetFrontendContribution: BoardsListWidgetFrontendContribution;
@inject(BoardsServiceClientImpl) @inject(BoardsServiceClientImpl)
protected readonly boardsServiceClient: BoardsServiceClientImpl; protected readonly boardsServiceClient: BoardsServiceClientImpl;
@ -108,12 +92,6 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
@inject(FileSystem) @inject(FileSystem)
protected readonly fileSystem: FileSystem; protected readonly fileSystem: FileSystem;
@inject(OpenerService)
protected readonly openerService: OpenerService;
@inject(WindowService)
protected readonly windowService: WindowService;
@inject(SketchesService) @inject(SketchesService)
protected readonly sketchService: SketchesService; protected readonly sketchService: SketchesService;
@ -129,27 +107,18 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
@inject(StatusBar) @inject(StatusBar)
protected readonly statusBar: StatusBar; protected readonly statusBar: StatusBar;
@inject(ArduinoShellLayoutRestorer)
protected readonly layoutRestorer: ArduinoShellLayoutRestorer;
@inject(QuickOpenService)
protected readonly quickOpenService: QuickOpenService;
@inject(ArduinoWorkspaceService) @inject(ArduinoWorkspaceService)
protected readonly workspaceService: ArduinoWorkspaceService; protected readonly workspaceService: ArduinoWorkspaceService;
@inject(ConfigService)
protected readonly configService: ConfigService;
@inject(MonitorConnection) @inject(MonitorConnection)
protected readonly monitorConnection: MonitorConnection; protected readonly monitorConnection: MonitorConnection;
@inject(ApplicationShell)
protected readonly shell: ApplicationShell;
@inject(FileNavigatorContribution) @inject(FileNavigatorContribution)
protected readonly fileNavigatorContributions: FileNavigatorContribution; protected readonly fileNavigatorContributions: FileNavigatorContribution;
@inject(OutputContribution)
protected readonly outputContribution: OutputContribution;
@inject(OutlineViewContribution) @inject(OutlineViewContribution)
protected readonly outlineContribution: OutlineViewContribution; protected readonly outlineContribution: OutlineViewContribution;
@ -195,6 +164,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
// Initialize all `pro-mode` widgets. This is a NOOP if in normal mode. // Initialize all `pro-mode` widgets. This is a NOOP if in normal mode.
for (const viewContribution of [ for (const viewContribution of [
this.fileNavigatorContributions, this.fileNavigatorContributions,
this.outputContribution,
this.outlineContribution, this.outlineContribution,
this.problemContribution, this.problemContribution,
this.scmContribution, this.scmContribution,
@ -255,6 +225,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
registerCommands(registry: CommandRegistry): void { registerCommands(registry: CommandRegistry): void {
// TODO: use proper API https://github.com/eclipse-theia/theia/pull/6599 // TODO: use proper API https://github.com/eclipse-theia/theia/pull/6599
const allHandlers: { [id: string]: CommandHandler[] } = (registry as any)._handlers; const allHandlers: { [id: string]: CommandHandler[] } = (registry as any)._handlers;
// Make sure to reveal the `Explorer` before executing `New File` and `New Folder`. // Make sure to reveal the `Explorer` before executing `New File` and `New Folder`.
for (const command of [WorkspaceCommands.NEW_FILE, WorkspaceCommands.NEW_FOLDER]) { for (const command of [WorkspaceCommands.NEW_FILE, WorkspaceCommands.NEW_FOLDER]) {
const { id } = command; const { id } = command;
@ -311,12 +282,15 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
if (!boardsConfig.selectedBoard.fqbn) { if (!boardsConfig.selectedBoard.fqbn) {
throw new Error(`No core is installed for ${boardsConfig.selectedBoard.name}. Please install the board.`); throw new Error(`No core is installed for ${boardsConfig.selectedBoard.name}. Please install the board.`);
} }
// Reveal the Output view asynchronously (don't await it)
this.outputContribution.openView({ reveal: true });
await this.coreService.compile({ uri: uri.toString(), board: boardsConfig.selectedBoard }); await this.coreService.compile({ uri: uri.toString(), board: boardsConfig.selectedBoard });
} catch (e) { } catch (e) {
await this.messageService.error(e.toString()); await this.messageService.error(e.toString());
} }
} }
}); });
registry.registerCommand(ArduinoCommands.UPLOAD, { registry.registerCommand(ArduinoCommands.UPLOAD, {
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left', isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
isEnabled: widget => true, isEnabled: widget => true,
@ -345,6 +319,8 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
if (!selectedPort) { if (!selectedPort) {
throw new Error('No ports selected. Please select a port.'); throw new Error('No ports selected. Please select a port.');
} }
// Reveal the Output view asynchronously (don't await it)
this.outputContribution.openView({ reveal: true });
await this.coreService.upload({ uri: uri.toString(), board: boardsConfig.selectedBoard, port: selectedPort.address }); await this.coreService.upload({ uri: uri.toString(), board: boardsConfig.selectedBoard, port: selectedPort.address });
} catch (e) { } catch (e) {
await this.messageService.error(e.toString()); await this.messageService.error(e.toString());
@ -355,6 +331,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
} }
} }
}); });
registry.registerCommand(ArduinoCommands.SHOW_OPEN_CONTEXT_MENU, { registry.registerCommand(ArduinoCommands.SHOW_OPEN_CONTEXT_MENU, {
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left', isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
isEnabled: widget => ArduinoToolbar.is(widget) && widget.side === 'left', isEnabled: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
@ -372,23 +349,27 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
} }
} }
}); });
registry.registerCommand(ArduinoCommands.OPEN_FILE_NAVIGATOR, { registry.registerCommand(ArduinoCommands.OPEN_FILE_NAVIGATOR, {
isEnabled: () => true, isEnabled: () => true,
execute: () => this.doOpenFile() execute: () => this.doOpenFile()
}) });
registry.registerCommand(ArduinoCommands.OPEN_SKETCH, { registry.registerCommand(ArduinoCommands.OPEN_SKETCH, {
isEnabled: () => true, isEnabled: () => true,
execute: async (sketch: Sketch) => { execute: async (sketch: Sketch) => {
this.workspaceService.open(new URI(sketch.uri)); this.workspaceService.open(new URI(sketch.uri));
} }
}) });
registry.registerCommand(ArduinoCommands.SAVE_SKETCH, { registry.registerCommand(ArduinoCommands.SAVE_SKETCH, {
isEnabled: widget => ArduinoToolbar.is(widget) && widget.side === 'left', isEnabled: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left', isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
execute: async (sketch: Sketch) => { execute: async (sketch: Sketch) => {
registry.executeCommand(CommonCommands.SAVE_ALL.id); registry.executeCommand(CommonCommands.SAVE_ALL.id);
} }
}) });
registry.registerCommand(ArduinoCommands.NEW_SKETCH, new WorkspaceRootUriAwareCommandHandler(this.workspaceService, this.selectionService, { registry.registerCommand(ArduinoCommands.NEW_SKETCH, new WorkspaceRootUriAwareCommandHandler(this.workspaceService, this.selectionService, {
execute: async uri => { execute: async uri => {
try { try {
@ -404,6 +385,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
} }
} }
})); }));
registry.registerCommand(ArduinoCommands.OPEN_BOARDS_DIALOG, { registry.registerCommand(ArduinoCommands.OPEN_BOARDS_DIALOG, {
isEnabled: () => true, isEnabled: () => true,
execute: async () => { execute: async () => {
@ -412,12 +394,13 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
this.boardsServiceClient.boardsConfig = boardsConfig; this.boardsServiceClient.boardsConfig = boardsConfig;
} }
} }
}) });
registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, { registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, {
execute: () => this.editorMode.toggle(), execute: () => this.editorMode.toggle(),
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right', isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right',
isToggled: () => this.editorMode.proMode isToggled: () => this.editorMode.proMode
}) });
} }
registerMenus(registry: MenuModelRegistry) { registerMenus(registry: MenuModelRegistry) {
@ -485,6 +468,17 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
return menuId; return menuId;
} }
registerKeybindings(keybindings: KeybindingRegistry): void {
keybindings.registerKeybinding({
command: ArduinoCommands.VERIFY.id,
keybinding: 'ctrlcmd+alt+v'
});
keybindings.registerKeybinding({
command: ArduinoCommands.UPLOAD.id,
keybinding: 'ctrlcmd+alt+u'
});
}
protected async registerSketchesInMenu(registry: MenuModelRegistry): Promise<void> { protected async registerSketchesInMenu(registry: MenuModelRegistry): Promise<void> {
this.sketchService.getSketches().then(sketches => { this.sketchService.getSketches().then(sketches => {
this.wsSketchCount = sketches.length; this.wsSketchCount = sketches.length;

View File

@ -28,7 +28,6 @@ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service
import { ArduinoWorkspaceService } from './arduino-workspace-service'; import { ArduinoWorkspaceService } from './arduino-workspace-service';
import { ThemeService } from '@theia/core/lib/browser/theming'; import { ThemeService } from '@theia/core/lib/browser/theming';
import { ArduinoTheme } from './arduino-theme'; import { ArduinoTheme } from './arduino-theme';
import { MenuContribution } from '@theia/core';
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
import { ArduinoOutlineViewContribution } from './customization/arduino-outline-contribution'; import { ArduinoOutlineViewContribution } from './customization/arduino-outline-contribution';
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
@ -42,7 +41,8 @@ import { EditorContribution } from '@theia/editor/lib/browser/editor-contributio
import { ArduinoEditorContribution } from './customization/arduino-editor-contribution'; import { ArduinoEditorContribution } from './customization/arduino-editor-contribution';
import { MonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution'; import { MonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution';
import { ArduinoMonacoStatusBarContribution } from './customization/arduino-monaco-status-bar-contribution'; import { ArduinoMonacoStatusBarContribution } from './customization/arduino-monaco-status-bar-contribution';
import { ApplicationShell, ShellLayoutRestorer } from '@theia/core/lib/browser'; import { ApplicationShell, ShellLayoutRestorer, KeybindingContribution } from '@theia/core/lib/browser';
import { MenuContribution } from '@theia/core/lib/common/menu';
import { ArduinoApplicationShell } from './customization/arduino-application-shell'; import { ArduinoApplicationShell } from './customization/arduino-application-shell';
import { ArduinoFrontendApplication } from './customization/arduino-frontend-application'; import { ArduinoFrontendApplication } from './customization/arduino-frontend-application';
import { BoardsConfigDialog, BoardsConfigDialogProps } from './boards/boards-config-dialog'; import { BoardsConfigDialog, BoardsConfigDialogProps } from './boards/boards-config-dialog';
@ -71,6 +71,7 @@ import { ArduinoAboutDialog } from './customization/arduino-about-dialog';
import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer'; import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer';
import { EditorMode } from './editor-mode'; import { EditorMode } from './editor-mode';
import { ListItemRenderer } from './components/component-list/list-item-renderer'; import { ListItemRenderer } from './components/component-list/list-item-renderer';
const ElementQueries = require('css-element-queries/src/ElementQueries'); const ElementQueries = require('css-element-queries/src/ElementQueries');
export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => { export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => {
@ -82,6 +83,7 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
bind(CommandContribution).toService(ArduinoFrontendContribution); bind(CommandContribution).toService(ArduinoFrontendContribution);
bind(MenuContribution).toService(ArduinoFrontendContribution); bind(MenuContribution).toService(ArduinoFrontendContribution);
bind(TabBarToolbarContribution).toService(ArduinoFrontendContribution); bind(TabBarToolbarContribution).toService(ArduinoFrontendContribution);
bind(KeybindingContribution).toService(ArduinoFrontendContribution);
bind(FrontendApplicationContribution).toService(ArduinoFrontendContribution); bind(FrontendApplicationContribution).toService(ArduinoFrontendContribution);
bind(ArduinoToolbarContribution).toSelf().inSingletonScope(); bind(ArduinoToolbarContribution).toSelf().inSingletonScope();

View File

@ -1,4 +1,5 @@
import { inject, injectable } from 'inversify'; import { inject, injectable } from 'inversify';
import { KeybindingRegistry } from '@theia/core/lib/browser';
import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager'; import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager';
import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplication } from '@theia/core/lib/browser/frontend-application';
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
@ -22,4 +23,13 @@ export class ArduinoProblemContribution extends ProblemContribution {
} }
} }
registerKeybindings(keybindings: KeybindingRegistry): void {
if (this.toggleCommand) {
keybindings.registerKeybinding({
command: this.toggleCommand.id,
keybinding: 'ctrlcmd+alt+shift+m'
});
}
}
} }

View File

@ -41,7 +41,7 @@ export class MonitorViewContribution extends AbstractViewContribution<MonitorWid
area: 'bottom' area: 'bottom'
}, },
toggleCommandId: MonitorViewContribution.OPEN_SERIAL_MONITOR, toggleCommandId: MonitorViewContribution.OPEN_SERIAL_MONITOR,
toggleKeybinding: 'ctrl+shift+m' toggleKeybinding: 'ctrlcmd+shift+m'
}) })
} }