Skip to content

Commit 20f44fe

Browse files
author
Akos Kitta
committed
more refactoring.
Signed-off-by: Akos Kitta <kittaakos@typefox.io>
1 parent 5abfc2c commit 20f44fe

17 files changed

+254
-368
lines changed

arduino-ide-extension/src/browser/arduino-commands.ts

-16
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,6 @@ export namespace ArduinoCommands {
44

55
const category = 'Arduino';
66

7-
export const VERIFY: Command = {
8-
id: 'arduino-verify',
9-
label: 'Verify Sketch'
10-
};
11-
export const VERIFY_TOOLBAR: Command = {
12-
id: 'arduino-verify-toolbar',
13-
};
14-
15-
export const UPLOAD: Command = {
16-
id: 'arduino-upload',
17-
label: 'Upload Sketch'
18-
};
19-
export const UPLOAD_TOOLBAR: Command = {
20-
id: 'arduino-upload-toolbar',
21-
};
22-
237
export const TOGGLE_COMPILE_FOR_DEBUG: Command = {
248
id: 'arduino-toggle-compile-for-debug'
259
};

arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

+19-332
Large diffs are not rendered by default.

arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

+4
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ import { OpenSketch } from './contributions/open-sketch';
8585
import { CloseSketch } from './contributions/close-sketch';
8686
import { SaveAsSketch } from './contributions/save-as-sketch';
8787
import { SaveSketch } from './contributions/save-sketch';
88+
import { VerifySketch } from './contributions/verify-sketch';
89+
import { UploadSketch } from './contributions/upload-sketch';
8890

8991
const ElementQueries = require('css-element-queries/src/ElementQueries');
9092

@@ -310,4 +312,6 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
310312
Contribution.configure(bind, CloseSketch);
311313
Contribution.configure(bind, SaveSketch);
312314
Contribution.configure(bind, SaveAsSketch);
315+
Contribution.configure(bind, VerifySketch);
316+
Contribution.configure(bind, UploadSketch);
313317
});

arduino-ide-extension/src/browser/boards/boards-auto-installer.ts

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { BoardsListWidgetFrontendContribution } from './boards-widget-frontend-c
77
import { InstallationProgressDialog } from '../components/progress-dialog';
88
import { BoardsConfig } from './boards-config';
99

10-
1110
/**
1211
* Listens on `BoardsConfig.Config` changes, if a board is selected which does not
1312
* have the corresponding core installed, it proposes the user to install the core.

arduino-ide-extension/src/browser/boards/boards-details-menu-updater.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposa
55
import { BoardsServiceClientImpl } from './boards-service-client-impl';
66
import { Board, ConfigOption } from '../../common/protocol';
77
import { FrontendApplicationContribution } from '@theia/core/lib/browser';
8-
import { ArduinoMenus } from '../arduino-frontend-contribution';
98
import { BoardsConfigStore } from './boards-config-store';
109
import { MainMenuManager } from '../menu/main-menu-manager';
10+
import { ArduinoMenus } from '../menu/arduino-menus';
1111

1212
@injectable()
1313
export class BoardsDetailsMenuUpdater implements FrontendApplicationContribution {

arduino-ide-extension/src/browser/boards/boards-widget-frontend-contribution.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { injectable } from 'inversify';
22
import { MenuModelRegistry } from '@theia/core';
33
import { BoardsListWidget } from './boards-list-widget';
4-
import { ArduinoMenus } from '../arduino-frontend-contribution';
54
import { BoardsPackage } from '../../common/protocol/boards-service';
65
import { ListWidgetFrontendContribution } from '../components/component-list/list-widget-frontend-contribution';
6+
import { ArduinoMenus } from '../menu/arduino-menus';
77

88
@injectable()
99
export class BoardsListWidgetFrontendContribution extends ListWidgetFrontendContribution<BoardsPackage> {

arduino-ide-extension/src/browser/contributions/contribution.ts

+4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { KeybindingRegistry, KeybindingContribution } from '@theia/core/lib/brow
1010
import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
1111
import { Command, CommandRegistry, CommandContribution, CommandService } from '@theia/core/lib/common/command';
1212
import { SketchesService, ConfigService, FileSystemExt, Sketch } from '../../common/protocol';
13+
import { EditorMode } from '../editor-mode';
1314

1415
export { Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry, URI, Sketch };
1516

@@ -28,6 +29,9 @@ export abstract class Contribution implements CommandContribution, MenuContribut
2829
@inject(WorkspaceService)
2930
protected readonly workspaceService: WorkspaceService;
3031

32+
@inject(EditorMode)
33+
protected readonly editorMode: EditorMode;
34+
3135
registerCommands(registry: CommandRegistry): void {
3236
}
3337

arduino-ide-extension/src/browser/contributions/new-sketch.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export class NewSketch extends SketchContribution {
3636
id: NewSketch.Commands.NEW_SKETCH__TOOLBAR.id,
3737
command: NewSketch.Commands.NEW_SKETCH__TOOLBAR.id,
3838
tooltip: 'New',
39-
priority: 4
39+
priority: 3
4040
});
4141
}
4242

arduino-ide-extension/src/browser/contributions/open-sketch.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export class OpenSketch extends SketchContribution {
8484
id: OpenSketch.Commands.OPEN_SKETCH__TOOLBAR.id,
8585
command: OpenSketch.Commands.OPEN_SKETCH__TOOLBAR.id,
8686
tooltip: 'Open',
87-
priority: 5
87+
priority: 4
8888
});
8989
}
9090

arduino-ide-extension/src/browser/contributions/save-sketch.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class SaveSketch extends SketchContribution {
3737
id: SaveSketch.Commands.SAVE_SKETCH__TOOLBAR.id,
3838
command: SaveSketch.Commands.SAVE_SKETCH__TOOLBAR.id,
3939
tooltip: 'Save',
40-
priority: 6
40+
priority: 5
4141
});
4242
}
4343

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import { inject, injectable } from 'inversify';
2+
import { CoreService } from '../../common/protocol';
3+
import { MonitorConnection } from '../monitor/monitor-connection';
4+
import { BoardsConfigStore } from '../boards/boards-config-store';
5+
import { BoardsServiceClientImpl } from '../boards/boards-service-client-impl';
6+
import { ArduinoMenus } from '../menu/arduino-menus';
7+
import { ArduinoToolbar } from '../toolbar/arduino-toolbar';
8+
import { SketchContribution, Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry } from './contribution';
9+
10+
@injectable()
11+
export class UploadSketch extends SketchContribution {
12+
13+
@inject(CoreService)
14+
protected readonly coreService: CoreService;
15+
16+
@inject(MonitorConnection)
17+
protected readonly monitorConnection: MonitorConnection;
18+
19+
@inject(BoardsConfigStore)
20+
protected readonly boardsConfigStore: BoardsConfigStore;
21+
22+
@inject(BoardsServiceClientImpl)
23+
protected readonly boardsServiceClientImpl: BoardsServiceClientImpl;
24+
25+
registerCommands(registry: CommandRegistry): void {
26+
registry.registerCommand(UploadSketch.Commands.UPLOAD_SKETCH, {
27+
execute: () => this.uploadSketch()
28+
});
29+
registry.registerCommand(UploadSketch.Commands.UPLOAD_SKETCH_TOOLBAR, {
30+
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
31+
execute: () => registry.executeCommand(UploadSketch.Commands.UPLOAD_SKETCH.id)
32+
});
33+
}
34+
35+
registerMenus(registry: MenuModelRegistry): void {
36+
registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, {
37+
commandId: UploadSketch.Commands.UPLOAD_SKETCH.id,
38+
label: 'Verify',
39+
order: '0'
40+
});
41+
}
42+
43+
registerKeybindings(registry: KeybindingRegistry): void {
44+
registry.registerKeybinding({
45+
command: UploadSketch.Commands.UPLOAD_SKETCH.id,
46+
keybinding: 'CtrlCmd+U'
47+
});
48+
}
49+
50+
registerToolbarItems(registry: TabBarToolbarRegistry): void {
51+
registry.registerItem({
52+
id: UploadSketch.Commands.UPLOAD_SKETCH_TOOLBAR.id,
53+
command: UploadSketch.Commands.UPLOAD_SKETCH_TOOLBAR.id,
54+
tooltip: 'Upload',
55+
priority: 1
56+
});
57+
}
58+
59+
async uploadSketch(): Promise<void> {
60+
const sketch = await this.getCurrentSketch();
61+
if (!sketch) {
62+
return;
63+
}
64+
const monitorConfig = this.monitorConnection.monitorConfig;
65+
if (monitorConfig) {
66+
await this.monitorConnection.disconnect();
67+
}
68+
try {
69+
const { boardsConfig } = this.boardsServiceClientImpl;
70+
if (!boardsConfig || !boardsConfig.selectedBoard) {
71+
throw new Error('No boards selected. Please select a board.');
72+
}
73+
const { selectedPort } = boardsConfig;
74+
if (!selectedPort) {
75+
throw new Error('No ports selected. Please select a port.');
76+
}
77+
if (!boardsConfig.selectedBoard.fqbn) {
78+
throw new Error(`No core is installed for the '${boardsConfig.selectedBoard.name}' board. Please install the core.`);
79+
}
80+
const fqbn = await this.boardsConfigStore.appendConfigToFqbn(boardsConfig.selectedBoard.fqbn);
81+
await this.coreService.upload({
82+
sketchUri: sketch.uri,
83+
fqbn,
84+
port: selectedPort.address,
85+
optimizeForDebug: this.editorMode.compileForDebug
86+
});
87+
} catch (e) {
88+
await this.messageService.error(e.toString());
89+
} finally {
90+
if (monitorConfig) {
91+
await this.monitorConnection.connect(monitorConfig);
92+
}
93+
}
94+
}
95+
96+
}
97+
98+
export namespace UploadSketch {
99+
export namespace Commands {
100+
export const UPLOAD_SKETCH: Command = {
101+
id: 'arduino-upload-sketch'
102+
};
103+
export const UPLOAD_SKETCH_TOOLBAR: Command = {
104+
id: 'arduino-upload-sketch--toolbar'
105+
};
106+
}
107+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import { inject, injectable } from 'inversify';
2+
import { ArduinoMenus } from '../menu/arduino-menus';
3+
import { ArduinoToolbar } from '../toolbar/arduino-toolbar';
4+
import { BoardsConfigStore } from '../boards/boards-config-store';
5+
import { BoardsServiceClientImpl } from '../boards/boards-service-client-impl';
6+
import { SketchContribution, Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry } from './contribution';
7+
import { CoreService } from '../../common/protocol';
8+
9+
@injectable()
10+
export class VerifySketch extends SketchContribution {
11+
12+
@inject(CoreService)
13+
protected readonly coreService: CoreService;
14+
15+
@inject(BoardsConfigStore)
16+
protected readonly boardsConfigStore: BoardsConfigStore;
17+
18+
@inject(BoardsServiceClientImpl)
19+
protected readonly boardsServiceClientImpl: BoardsServiceClientImpl;
20+
21+
registerCommands(registry: CommandRegistry): void {
22+
registry.registerCommand(VerifySketch.Commands.VERIFY_SKETCH, {
23+
execute: () => this.verifySketch()
24+
});
25+
registry.registerCommand(VerifySketch.Commands.VERIFY_SKETCH_TOOLBAR, {
26+
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'left',
27+
execute: () => registry.executeCommand(VerifySketch.Commands.VERIFY_SKETCH.id)
28+
});
29+
}
30+
31+
registerMenus(registry: MenuModelRegistry): void {
32+
registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, {
33+
commandId: VerifySketch.Commands.VERIFY_SKETCH.id,
34+
label: 'Verify/Compile',
35+
order: '0'
36+
});
37+
}
38+
39+
registerKeybindings(registry: KeybindingRegistry): void {
40+
registry.registerKeybinding({
41+
command: VerifySketch.Commands.VERIFY_SKETCH.id,
42+
keybinding: 'CtrlCmd+R'
43+
});
44+
}
45+
46+
registerToolbarItems(registry: TabBarToolbarRegistry): void {
47+
registry.registerItem({
48+
id: VerifySketch.Commands.VERIFY_SKETCH_TOOLBAR.id,
49+
command: VerifySketch.Commands.VERIFY_SKETCH_TOOLBAR.id,
50+
tooltip: 'Verify',
51+
priority: 0
52+
});
53+
}
54+
55+
async verifySketch(): Promise<void> {
56+
const sketch = await this.getCurrentSketch();
57+
if (!sketch) {
58+
return;
59+
}
60+
try {
61+
const { boardsConfig } = this.boardsServiceClientImpl;
62+
if (!boardsConfig || !boardsConfig.selectedBoard) {
63+
throw new Error('No boards selected. Please select a board.');
64+
}
65+
if (!boardsConfig.selectedBoard.fqbn) {
66+
throw new Error(`No core is installed for the '${boardsConfig.selectedBoard.name}' board. Please install the core.`);
67+
}
68+
const fqbn = await this.boardsConfigStore.appendConfigToFqbn(boardsConfig.selectedBoard.fqbn);
69+
await this.coreService.compile({
70+
sketchUri: sketch.uri,
71+
fqbn,
72+
optimizeForDebug: this.editorMode.compileForDebug
73+
});
74+
} catch (e) {
75+
await this.messageService.error(e.toString());
76+
}
77+
}
78+
79+
}
80+
81+
export namespace VerifySketch {
82+
export namespace Commands {
83+
export const VERIFY_SKETCH: Command = {
84+
id: 'arduino-verify-sketch'
85+
};
86+
export const VERIFY_SKETCH_TOOLBAR: Command = {
87+
id: 'arduino-verify-sketch--toolbar'
88+
};
89+
}
90+
}

arduino-ide-extension/src/browser/library/library-widget-frontend-contribution.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FrontendApplicationContribution } from '@theia/core/lib/browser/fronten
33
import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
44
import { MenuModelRegistry } from '@theia/core';
55
import { LibraryListWidget } from './library-list-widget';
6-
import { ArduinoMenus } from '../arduino-frontend-contribution';
6+
import { ArduinoMenus } from '../menu/arduino-menus';
77

88
@injectable()
99
export class LibraryListWidgetFrontendContribution extends AbstractViewContribution<LibraryListWidget> implements FrontendApplicationContribution {

arduino-ide-extension/src/browser/menu/arduino-menus.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
1+
import { MAIN_MENU_BAR } from '@theia/core/lib/common/menu';
12
import { CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
23

34
export namespace ArduinoMenus {
45

56
// Main menu
7+
// File
68
export const FILE__SKETCH_GROUP = [...CommonMenus.FILE, '0_sketch'];
79
export const FILE__PRINT_GROUP = [...CommonMenus.FILE, '1_print'];
810

9-
// `Open...` context menu
11+
// Sketch
12+
export const SKETCH = [...MAIN_MENU_BAR, '3_sketch'];
13+
export const SKETCH__MAIN_GROUP = [...SKETCH, '0_main'];
14+
export const SKETCH__UTILS_GROUP = [...SKETCH, '1_utils'];
15+
16+
// Tools
17+
export const TOOLS = [...MAIN_MENU_BAR, '4_tools'];
18+
export const TOOLS__MAIN_GROUP = [...TOOLS, '0_main'];
19+
20+
// Context menu
21+
// Open
1022
export const OPEN_SKETCH__CONTEXT = ['arduino-open-sketch--context'];
1123
export const OPEN_SKETCH__CONTEXT__OPEN_GROUP = [...OPEN_SKETCH__CONTEXT, '0_open'];
1224
export const OPEN_SKETCH__CONTEXT__RECENT_GROUP = [...OPEN_SKETCH__CONTEXT, '1_recent'];

arduino-ide-extension/src/browser/menu/browser-arduino-menu-module.ts

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { MainMenuManager } from './main-menu-manager';
55
import { ArduinoMenuContribution } from './arduino-menu-contribution';
66
import { ArduinoBrowserMainMenuFactory } from './arduino-browser-main-menu-factory';
77

8-
98
export default new ContainerModule((bind, unbind, isBound, rebind) => {
109
bind(ArduinoBrowserMainMenuFactory).toSelf().inSingletonScope();
1110
bind(MainMenuManager).toService(ArduinoBrowserMainMenuFactory);

arduino-ide-extension/src/browser/monitor/monitor-view-contribution.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as React from 'react';
2-
import { injectable, inject } from "inversify";
3-
import { AbstractViewContribution } from "@theia/core/lib/browser";
4-
import { MonitorWidget } from "./monitor-widget";
5-
import { MenuModelRegistry, Command, CommandRegistry } from "@theia/core";
6-
import { ArduinoMenus } from "../arduino-frontend-contribution";
7-
import { TabBarToolbarContribution, TabBarToolbarRegistry } from "@theia/core/lib/browser/shell/tab-bar-toolbar";
2+
import { injectable, inject } from 'inversify';
3+
import { AbstractViewContribution } from '@theia/core/lib/browser';
4+
import { MonitorWidget } from './monitor-widget';
5+
import { MenuModelRegistry, Command, CommandRegistry } from '@theia/core';
6+
import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
87
import { ArduinoToolbar } from '../toolbar/arduino-toolbar';
98
import { MonitorModel } from './monitor-model';
9+
import { ArduinoMenus } from '../menu/arduino-menus';
1010

1111
export namespace SerialMonitor {
1212
export namespace Commands {

0 commit comments

Comments
 (0)