Skip to content

Commit fb542e2

Browse files
authored
Merge pull request #56 from bcmi-labs/advanced-mode-in-top-panel
Advanced mode in top panel
2 parents 3e0842e + 6ff5405 commit fb542e2

File tree

6 files changed

+59
-28
lines changed

6 files changed

+59
-28
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export namespace ArduinoCommands {
3939
id: "arduino-open-boards-dialog"
4040
}
4141

42-
export const TOGGLE_PRO_MODE: Command = {
43-
id: "arduino-toggle-pro-mode"
42+
export const TOGGLE_ADVANCED_MODE: Command = {
43+
id: "arduino-toggle-advanced-mode"
4444
}
4545
}

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

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,14 @@ export namespace ArduinoMenus {
5353
export const TOOLS = [...MAIN_MENU_BAR, '4_tools'];
5454
}
5555

56-
export const ARDUINO_PRO_MODE: boolean = (() => {
57-
return window.localStorage.getItem('arduino-pro-mode') === 'true';
58-
})();
56+
export namespace ArduinoAdvancedMode {
57+
export const LS_ID = 'arduino-advanced-mode';
58+
export const TOGGLED: boolean = (() => {
59+
const advancedModeStr = window.localStorage.getItem(LS_ID);
60+
return advancedModeStr === 'true';
61+
})();
62+
}
63+
5964

6065
@injectable()
6166
export class ArduinoFrontendContribution implements TabBarToolbarContribution, CommandContribution, MenuContribution {
@@ -167,26 +172,22 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
167172
registry.registerItem({
168173
id: ArduinoCommands.VERIFY.id,
169174
command: ArduinoCommands.VERIFY.id,
170-
tooltip: 'Verify',
171-
text: '$(check)'
175+
tooltip: 'Verify'
172176
});
173177
registry.registerItem({
174178
id: ArduinoCommands.UPLOAD.id,
175179
command: ArduinoCommands.UPLOAD.id,
176-
tooltip: 'Upload',
177-
text: '$(arrow-right)'
180+
tooltip: 'Upload'
178181
});
179182
registry.registerItem({
180183
id: ArduinoCommands.SHOW_OPEN_CONTEXT_MENU.id,
181184
command: ArduinoCommands.SHOW_OPEN_CONTEXT_MENU.id,
182-
tooltip: 'Open',
183-
text: '$(arrow-up)'
185+
tooltip: 'Open'
184186
});
185187
registry.registerItem({
186188
id: ArduinoCommands.SAVE_SKETCH.id,
187189
command: ArduinoCommands.SAVE_SKETCH.id,
188-
tooltip: 'Save',
189-
text: '$(arrow-down)'
190+
tooltip: 'Save'
190191
});
191192
registry.registerItem({
192193
id: BoardsToolBarItem.TOOLBAR_ID,
@@ -203,7 +204,15 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
203204
command: MonitorViewContribution.OPEN_SERIAL_MONITOR,
204205
tooltip: 'Toggle Serial Monitor',
205206
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right'
206-
})
207+
});
208+
209+
registry.registerItem({
210+
id: ArduinoCommands.TOGGLE_ADVANCED_MODE.id,
211+
command: ArduinoCommands.TOGGLE_ADVANCED_MODE.id,
212+
tooltip: 'Toggle Advanced Mode',
213+
text: (ArduinoAdvancedMode.TOGGLED ? '$(toggle-on)' : '$(toggle-off)'),
214+
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right'
215+
});
207216
}
208217

209218
registerCommands(registry: CommandRegistry): void {
@@ -327,19 +336,20 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
327336
this.boardsServiceClient.boardsConfig = boardsConfig;
328337
}
329338
}
330-
});
331-
registry.registerCommand(ArduinoCommands.TOGGLE_PRO_MODE, {
339+
})
340+
registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, {
332341
execute: () => {
333-
const oldModeState = ARDUINO_PRO_MODE;
334-
window.localStorage.setItem('arduino-pro-mode', oldModeState ? 'false' : 'true');
342+
const oldModeState = ArduinoAdvancedMode.TOGGLED;
343+
window.localStorage.setItem(ArduinoAdvancedMode.LS_ID, oldModeState ? 'false' : 'true');
335344
registry.executeCommand('reset.layout');
336345
},
337-
isToggled: () => ARDUINO_PRO_MODE
338-
});
346+
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right',
347+
isToggled: () => ArduinoAdvancedMode.TOGGLED
348+
})
339349
}
340350

341351
registerMenus(registry: MenuModelRegistry) {
342-
if (!ARDUINO_PRO_MODE) {
352+
if (!ArduinoAdvancedMode.TOGGLED) {
343353
registry.unregisterMenuAction(FileSystemCommands.UPLOAD);
344354
registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD);
345355

@@ -376,7 +386,7 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
376386
registry.registerSubmenu(ArduinoMenus.TOOLS, 'Tools');
377387

378388
registry.registerMenuAction(CommonMenus.HELP, {
379-
commandId: ArduinoCommands.TOGGLE_PRO_MODE.id,
389+
commandId: ArduinoCommands.TOGGLE_ADVANCED_MODE.id,
380390
label: 'Advanced Mode'
381391
})
382392
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/w
88
import { FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser/frontend-application'
99
import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate';
1010
import { LibraryListWidget } from './library/library-list-widget';
11-
import { ArduinoFrontendContribution, ARDUINO_PRO_MODE } from './arduino-frontend-contribution';
11+
import { ArduinoFrontendContribution, ArduinoAdvancedMode } from './arduino-frontend-contribution';
1212
import { ArduinoLanguageGrammarContribution } from './language/arduino-language-grammar-contribution';
1313
import { LibraryService, LibraryServicePath } from '../common/protocol/library-service';
1414
import { BoardsService, BoardsServicePath, BoardsServiceClient } from '../common/protocol/boards-service';
@@ -188,7 +188,7 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
188188
themeService.register(...ArduinoTheme.themes);
189189

190190
// customizing default theia
191-
if (!ARDUINO_PRO_MODE) {
191+
if (!ArduinoAdvancedMode.TOGGLED) {
192192
unbind(OutlineViewContribution);
193193
bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope();
194194
unbind(ProblemContribution);

arduino-ide-extension/src/browser/customization/custom-common-frontend-contribution.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { injectable } from "inversify";
22
import { CommonFrontendContribution, CommonMenus, CommonCommands } from "@theia/core/lib/browser";
33
import { MenuModelRegistry } from "@theia/core";
4-
import { ARDUINO_PRO_MODE } from "../arduino-frontend-contribution";
4+
import { ArduinoAdvancedMode } from "../arduino-frontend-contribution";
55

66
@injectable()
77
export class CustomCommonFrontendContribution extends CommonFrontendContribution {
88
registerMenus(registry: MenuModelRegistry): void {
9-
if (!ARDUINO_PRO_MODE) {
9+
if (!ArduinoAdvancedMode.TOGGLED) {
1010
registry.registerSubmenu(CommonMenus.FILE, 'File');
1111
registry.registerSubmenu(CommonMenus.EDIT, 'Edit');
1212

arduino-ide-extension/src/browser/style/main.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@
111111
color: var(--theia-ui-font-color3);
112112
}
113113

114+
.p-TabBar-toolbar .item > div#arduino-toggle-advanced-mode {
115+
display: flex;
116+
width: 24px;
117+
height: 24px;
118+
justify-content: center;
119+
align-items: center;
120+
color: var(--theia-ui-font-color3);
121+
}
122+
114123
.monaco-editor .margin {
115124
border-right: 2px solid var(--theia-border-color1);
116125
box-sizing: border-box;

arduino-ide-extension/src/browser/toolbar/arduino-toolbar.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react';
22
import { TabBarToolbar, TabBarToolbarRegistry, TabBarToolbarItem, ReactTabBarToolbarItem } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
33
import { CommandRegistry } from '@theia/core/lib/common/command';
44
import { ReactWidget } from '@theia/core/lib/browser';
5-
import { LabelParser } from '@theia/core/lib/browser/label-parser';
5+
import { LabelParser, LabelIcon } from '@theia/core/lib/browser/label-parser';
66

77
export const ARDUINO_TOOLBAR_ITEM_CLASS = 'arduino-tool-item';
88

@@ -11,6 +11,7 @@ export namespace ArduinoToolbarComponent {
1111
side: 'left' | 'right',
1212
items: (TabBarToolbarItem | ReactTabBarToolbarItem)[],
1313
commands: CommandRegistry,
14+
labelParser: LabelParser,
1415
commandIsEnabled: (id: string) => boolean,
1516
executeCommand: (e: React.MouseEvent<HTMLElement>) => void
1617
}
@@ -27,14 +28,24 @@ export class ArduinoToolbarComponent extends React.Component<ArduinoToolbarCompo
2728

2829
protected renderItem = (item: TabBarToolbarItem) => {
2930
let innerText = '';
31+
let className = `${item.id} arduino-tool-icon`;
32+
if (item.text) {
33+
for (const labelPart of this.props.labelParser.parse(item.text)) {
34+
if (typeof labelPart !== 'string' && LabelIcon.is(labelPart)) {
35+
className += ` fa fa-${labelPart.name}`;
36+
} else {
37+
innerText = labelPart;
38+
}
39+
}
40+
}
3041
const command = this.props.commands.getCommand(item.command);
3142
const cls = `${ARDUINO_TOOLBAR_ITEM_CLASS} ${TabBarToolbar.Styles.TAB_BAR_TOOLBAR_ITEM} ${command && this.props.commandIsEnabled(command.id) ? ' enabled' : ''}`
3243
return <div key={item.id}
3344
className={cls} >
3445
<div
3546
key={item.id + '-icon'}
3647
id={item.id}
37-
className={`${item.id} arduino-tool-icon`}
48+
className={className}
3849
onClick={this.props.executeCommand}
3950
onMouseOver={() => this.setState({ tooltip: item.tooltip || '' })}
4051
onMouseOut={() => this.setState({ tooltip: '' })}
@@ -105,6 +116,7 @@ export class ArduinoToolbar extends ReactWidget {
105116
return <ArduinoToolbarComponent
106117
key='arduino-toolbar-component'
107118
side={this.side}
119+
labelParser={this.labelParser}
108120
items={[...this.items.values()]}
109121
commands={this.commands}
110122
commandIsEnabled={this.doCommandIsEnabled}

0 commit comments

Comments
 (0)