Skip to content

Commit 1742c53

Browse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
ATL-812: Enhanced the Help menu.
Signed-off-by: Akos Kitta <[email protected]>
1 parent e33af0d commit 1742c53

File tree

6 files changed

+155
-4
lines changed

6 files changed

+155
-4
lines changed

Diff for: arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
309309
label: 'Optimize for Debugging',
310310
order: '1'
311311
});
312-
registry.registerMenuAction(CommonMenus.HELP, {
312+
registry.registerMenuAction(ArduinoMenus.HELP__CONTROL_GROUP, {
313313
commandId: ArduinoCommands.TOGGLE_ADVANCED_MODE.id,
314314
label: 'Advanced Mode'
315315
});

Diff for: arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ import { DebugFrontendApplicationContribution } from './theia/debug/debug-fronte
135135
import { DebugFrontendApplicationContribution as TheiaDebugFrontendApplicationContribution } from '@theia/debug/lib/browser/debug-frontend-application-contribution';
136136
import { BoardSelection } from './contributions/board-selection';
137137
import { OpenRecentSketch } from './contributions/open-recent-sketch';
138+
import { Help } from './contributions/help';
138139

139140
const ElementQueries = require('css-element-queries/src/ElementQueries');
140141

@@ -339,6 +340,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
339340
Contribution.configure(bind, Sketchbook);
340341
Contribution.configure(bind, BoardSelection);
341342
Contribution.configure(bind, OpenRecentSketch);
343+
Contribution.configure(bind, Help);
342344

343345
bind(OutputServiceImpl).toSelf().inSingletonScope().onActivation(({ container }, outputService) => {
344346
WebSocketConnectionProvider.createProxy(container, OutputServicePath, outputService);

Diff for: arduino-ide-extension/src/browser/contributions/about.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@ export class About extends Contribution {
2424
}
2525

2626
registerMenus(registry: MenuModelRegistry): void {
27-
// On macOS we will get the `Quit ${YOUR_APP_NAME}` menu item natively, no need to duplicate it.
2827
registry.registerMenuAction(ArduinoMenus.HELP__ABOUT_GROUP, {
2928
commandId: About.Commands.ABOUT_APP.id,
30-
label: `About${isOSX ? ` ${this.applicationName}` : ''}`,
29+
label: `About ${this.applicationName}`,
3130
order: '0'
3231
});
3332
}
+137
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import { inject, injectable } from 'inversify';
2+
import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor';
3+
import { EditorManager } from '@theia/editor/lib/browser/editor-manager';
4+
import { WindowService } from '@theia/core/lib/browser/window/window-service';
5+
import { CommandHandler } from '@theia/core/lib/common/command';
6+
import { QuickInputService } from '@theia/core/lib/browser/quick-open/quick-input-service';
7+
import { ArduinoMenus } from '../menu/arduino-menus';
8+
import { Contribution, Command, MenuModelRegistry, CommandRegistry, KeybindingRegistry } from './contribution';
9+
10+
@injectable()
11+
export class Help extends Contribution {
12+
13+
@inject(EditorManager)
14+
protected readonly editorManager: EditorManager;
15+
16+
@inject(WindowService)
17+
protected readonly windowService: WindowService;
18+
19+
@inject(QuickInputService)
20+
protected readonly quickInputService: QuickInputService;
21+
22+
registerCommands(registry: CommandRegistry): void {
23+
const open = (url: string) => this.windowService.openNewWindow(url, { external: true });
24+
const createOpenHandler = (url: string) => <CommandHandler>{
25+
execute: () => open(url)
26+
};
27+
registry.registerCommand(Help.Commands.GETTING_STARTED, createOpenHandler('https://www.arduino.cc/en/Guide'));
28+
registry.registerCommand(Help.Commands.ENVIRONMENT, createOpenHandler('https://www.arduino.cc/en/Guide/Environment'));
29+
registry.registerCommand(Help.Commands.TROUBLESHOOTING, createOpenHandler('https://support.arduino.cc/hc/en-us'));
30+
registry.registerCommand(Help.Commands.REFERENCE, createOpenHandler('https://www.arduino.cc/reference/en/'));
31+
registry.registerCommand(Help.Commands.FIND_IN_REFERENCE, {
32+
execute: async () => {
33+
let searchFor: string | undefined = undefined;
34+
const { currentEditor } = this.editorManager;
35+
if (currentEditor && currentEditor.editor instanceof MonacoEditor) {
36+
const codeEditor = currentEditor.editor.getControl();
37+
const selection = codeEditor.getSelection();
38+
const model = codeEditor.getModel();
39+
if (model && selection && !monaco.Range.isEmpty(selection)) {
40+
searchFor = model.getValueInRange(selection);
41+
}
42+
}
43+
if (!searchFor) {
44+
searchFor = await this.quickInputService.open({
45+
prompt: 'Search on Arduino.cc',
46+
placeHolder: 'Type a keyword'
47+
});
48+
}
49+
if (searchFor) {
50+
return open(`https://www.arduino.cc/search?q=${encodeURIComponent(searchFor)}&tab=reference`);
51+
}
52+
}
53+
});
54+
registry.registerCommand(Help.Commands.FAQ, createOpenHandler('https://support.arduino.cc/hc/en-us'));
55+
registry.registerCommand(Help.Commands.VISIT_ARDUINO, createOpenHandler('https://www.arduino.cc/'));
56+
}
57+
58+
registerMenus(registry: MenuModelRegistry): void {
59+
registry.registerMenuAction(ArduinoMenus.HELP__MAIN_GROUP, {
60+
commandId: Help.Commands.GETTING_STARTED.id,
61+
order: '0'
62+
});
63+
registry.registerMenuAction(ArduinoMenus.HELP__MAIN_GROUP, {
64+
commandId: Help.Commands.ENVIRONMENT.id,
65+
order: '1'
66+
});
67+
registry.registerMenuAction(ArduinoMenus.HELP__MAIN_GROUP, {
68+
commandId: Help.Commands.TROUBLESHOOTING.id,
69+
order: '2'
70+
});
71+
registry.registerMenuAction(ArduinoMenus.HELP__MAIN_GROUP, {
72+
commandId: Help.Commands.REFERENCE.id,
73+
order: '3'
74+
});
75+
76+
registry.registerMenuAction(ArduinoMenus.HELP__FIND_GROUP, {
77+
commandId: Help.Commands.FIND_IN_REFERENCE.id,
78+
order: '4'
79+
});
80+
registry.registerMenuAction(ArduinoMenus.HELP__FIND_GROUP, {
81+
commandId: Help.Commands.FAQ.id,
82+
order: '5'
83+
});
84+
registry.registerMenuAction(ArduinoMenus.HELP__FIND_GROUP, {
85+
commandId: Help.Commands.VISIT_ARDUINO.id,
86+
order: '6'
87+
});
88+
}
89+
90+
registerKeybindings(registry: KeybindingRegistry): void {
91+
registry.registerKeybinding({
92+
command: Help.Commands.FIND_IN_REFERENCE.id,
93+
keybinding: 'CtrlCmd+Shift+F'
94+
});
95+
}
96+
97+
}
98+
99+
export namespace Help {
100+
export namespace Commands {
101+
export const GETTING_STARTED: Command = {
102+
id: 'arduino-getting-started',
103+
label: 'Getting Started',
104+
category: 'Arduino'
105+
};
106+
export const ENVIRONMENT: Command = {
107+
id: 'arduino-environment',
108+
label: 'Environment',
109+
category: 'Arduino'
110+
};
111+
export const TROUBLESHOOTING: Command = {
112+
id: 'arduino-troubleshooting',
113+
label: 'Troubleshooting',
114+
category: 'Arduino'
115+
};
116+
export const REFERENCE: Command = {
117+
id: 'arduino-reference',
118+
label: 'Reference',
119+
category: 'Arduino'
120+
};
121+
export const FIND_IN_REFERENCE: Command = {
122+
id: 'arduino-find-in-reference',
123+
label: 'Find in Reference',
124+
category: 'Arduino'
125+
};
126+
export const FAQ: Command = {
127+
id: 'arduino-faq',
128+
label: 'Frequently Asked Questions',
129+
category: 'Arduino'
130+
};
131+
export const VISIT_ARDUINO: Command = {
132+
id: 'arduino-visit-arduino',
133+
label: 'Visit Arduino.cc',
134+
category: 'Arduino'
135+
};
136+
}
137+
}

Diff for: arduino-ide-extension/src/browser/menu/arduino-menus.ts

+7
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ export namespace ArduinoMenus {
4949
export const TOOLS__BOARD_SETTINGS_GROUP = [...TOOLS, '3_board_settings'];
5050

5151
// -- Help
52+
// `Getting Started`, `Environment`, `Troubleshooting`, etc.
53+
export const HELP__MAIN_GROUP = [...CommonMenus.HELP, '0_main'];
54+
// `Find in reference`, `FAQ`, etc.
55+
export const HELP__FIND_GROUP = [...CommonMenus.HELP, '1_find'];
56+
// `Advanced Mode`.
57+
// XXX: this will be removed.
58+
export const HELP__CONTROL_GROUP = [...CommonMenus.HELP, '2_control'];
5259
// `About` group
5360
// XXX: on macOS, the about group is not under `Help`
5461
export const HELP__ABOUT_GROUP = [...(isOSX ? MAIN_MENU_BAR : CommonMenus.HELP), '999_about'];

Diff for: arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-frontend-contribution.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { inject, injectable } from 'inversify';
2+
import { MenuModelRegistry } from '@theia/core/lib/common/menu';
3+
import { KeybindingRegistry } from '@theia/core/lib/browser/keybinding';
24
import { FrontendApplication } from '@theia/core/lib/browser/frontend-application';
35
import { SearchInWorkspaceFrontendContribution as TheiaSearchInWorkspaceFrontendContribution, SearchInWorkspaceCommands } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
46
import { EditorMode } from '../../editor-mode';
5-
import { MenuModelRegistry } from '@theia/core';
67

78
@injectable()
89
export class SearchInWorkspaceFrontendContribution extends TheiaSearchInWorkspaceFrontendContribution {
@@ -21,4 +22,9 @@ export class SearchInWorkspaceFrontendContribution extends TheiaSearchInWorkspac
2122
registry.unregisterMenuAction(SearchInWorkspaceCommands.OPEN_SIW_WIDGET);
2223
}
2324

25+
registerKeybindings(keybindings: KeybindingRegistry): void {
26+
super.registerKeybindings(keybindings);
27+
keybindings.unregisterKeybinding(SearchInWorkspaceCommands.OPEN_SIW_WIDGET);
28+
}
29+
2430
}

0 commit comments

Comments
 (0)