Skip to content

Commit 23a967b

Browse files
committed
One can toggle between pro and simple mode
Signed-off-by: jbicker <jan.bicker@typefox.io>
1 parent 17fab65 commit 23a967b

15 files changed

+114
-90
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,8 @@ export namespace ArduinoCommands {
4848
id: "arduino-open-boards-dialog"
4949
}
5050

51+
export const TOGGLE_PROMODE: Command = {
52+
id: "arduino-toggle-pro-mode"
53+
}
54+
5155
}

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

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service
2020
import { SketchFactory } from './sketch-factory';
2121
import { ArduinoToolbar } from './toolbar/arduino-toolbar';
2222
import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser';
23-
import { ContextMenuRenderer, OpenerService, Widget, StatusBar } from '@theia/core/lib/browser';
23+
import { ContextMenuRenderer, OpenerService, Widget, StatusBar, ShellLayoutRestorer } from '@theia/core/lib/browser';
2424
import { OpenFileDialogProps, FileDialogService } from '@theia/filesystem/lib/browser/file-dialog';
2525
import { FileSystem, FileStat } from '@theia/filesystem/lib/common';
2626
import { ArduinoToolbarContextMenu } from './arduino-file-menu';
@@ -40,6 +40,11 @@ export namespace ArduinoMenus {
4040
export const TOOLS = [...MAIN_MENU_BAR, '4_tools'];
4141
}
4242

43+
export const ARDUINO_PRO_MODE: boolean = (() => {
44+
const proModeStr = window.localStorage.getItem('arduino-pro-mode');
45+
return proModeStr === 'true';
46+
})();
47+
4348
@injectable()
4449
export class ArduinoFrontendContribution implements TabBarToolbarContribution, CommandContribution, MenuContribution {
4550

@@ -106,6 +111,9 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
106111
@inject(StatusBar)
107112
protected readonly statusBar: StatusBar;
108113

114+
@inject(ShellLayoutRestorer)
115+
protected readonly layoutRestorer: ShellLayoutRestorer;
116+
109117
protected boardsToolbarItem: BoardsToolBarItem | null;
110118
protected wsSketchCount: number = 0;
111119

@@ -272,6 +280,14 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
272280
}
273281
}
274282
})
283+
registry.registerCommand(ArduinoCommands.TOGGLE_PROMODE, {
284+
execute: () => {
285+
const oldModeState = ARDUINO_PRO_MODE;
286+
window.localStorage.setItem('arduino-pro-mode', oldModeState ? 'false' : 'true');
287+
registry.executeCommand('reset.layout');
288+
},
289+
isToggled: () => ARDUINO_PRO_MODE
290+
})
275291
}
276292

277293
protected async selectBoard(board: Board) {
@@ -280,25 +296,26 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
280296
this.boardsToolbarItem.setSelectedBoard(board);
281297
}
282298
}
283-
299+
284300
registerMenus(registry: MenuModelRegistry) {
285-
registry.unregisterMenuAction(FileSystemCommands.UPLOAD);
286-
registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD);
287-
288-
registry.unregisterMenuAction(WorkspaceCommands.NEW_FILE);
289-
registry.unregisterMenuAction(WorkspaceCommands.NEW_FOLDER);
290-
291-
registry.unregisterMenuAction(WorkspaceCommands.OPEN_FOLDER);
292-
registry.unregisterMenuAction(WorkspaceCommands.OPEN_WORKSPACE);
293-
registry.unregisterMenuAction(WorkspaceCommands.OPEN_RECENT_WORKSPACE);
294-
registry.unregisterMenuAction(WorkspaceCommands.SAVE_WORKSPACE_AS);
295-
registry.unregisterMenuAction(WorkspaceCommands.CLOSE);
296-
297-
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(MonacoMenus.SELECTION));
298-
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(EditorMainMenu.GO));
299-
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(TerminalMenus.TERMINAL));
300-
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.VIEW));
301-
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.HELP));
301+
if (!ARDUINO_PRO_MODE) {
302+
registry.unregisterMenuAction(FileSystemCommands.UPLOAD);
303+
registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD);
304+
305+
registry.unregisterMenuAction(WorkspaceCommands.NEW_FILE);
306+
registry.unregisterMenuAction(WorkspaceCommands.NEW_FOLDER);
307+
308+
registry.unregisterMenuAction(WorkspaceCommands.OPEN_FOLDER);
309+
registry.unregisterMenuAction(WorkspaceCommands.OPEN_WORKSPACE);
310+
registry.unregisterMenuAction(WorkspaceCommands.OPEN_RECENT_WORKSPACE);
311+
registry.unregisterMenuAction(WorkspaceCommands.SAVE_WORKSPACE_AS);
312+
registry.unregisterMenuAction(WorkspaceCommands.CLOSE);
313+
314+
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(MonacoMenus.SELECTION));
315+
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(EditorMainMenu.GO));
316+
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(TerminalMenus.TERMINAL));
317+
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.VIEW));
318+
}
302319

303320
registry.registerSubmenu(ArduinoMenus.SKETCH, 'Sketch');
304321
registry.registerMenuAction(ArduinoMenus.SKETCH, {
@@ -317,6 +334,11 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
317334
});
318335

319336
registry.registerSubmenu(ArduinoMenus.TOOLS, 'Tools');
337+
338+
registry.registerMenuAction(CommonMenus.HELP, {
339+
commandId: ArduinoCommands.TOGGLE_PROMODE.id,
340+
label: 'Advanced Mode'
341+
})
320342
}
321343

322344
protected getMenuId(menuPath: string[]): string {

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

Lines changed: 21 additions & 15 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 } from './arduino-frontend-contribution';
11+
import { ArduinoFrontendContribution, ARDUINO_PRO_MODE } 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 } from '../common/protocol/boards-service';
@@ -50,6 +50,10 @@ import { SelectBoardDialog, SelectBoardDialogProps } from './boards/select-board
5050
import { SelectBoardDialogWidget } from './boards/select-board-dialog-widget';
5151
const ElementQueries = require('css-element-queries/src/ElementQueries');
5252

53+
if (!ARDUINO_PRO_MODE) {
54+
require('../../src/browser/style/silent-bottom-panel-tabs.css');
55+
}
56+
5357
export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => {
5458
ElementQueries.listen();
5559
ElementQueries.init();
@@ -138,20 +142,22 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
138142
themeService.register(...ArduinoTheme.themes);
139143

140144
// customizing default theia
141-
unbind(OutlineViewContribution);
142-
bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope();
143-
unbind(ProblemContribution);
144-
bind(ProblemContribution).to(SilentProblemContribution).inSingletonScope();
145-
unbind(FileNavigatorContribution);
146-
bind(FileNavigatorContribution).to(SilentNavigatorContribution).inSingletonScope();
147-
unbind(OutputToolbarContribution);
148-
bind(OutputToolbarContribution).to(ArduinoOutputToolContribution).inSingletonScope();
149-
unbind(EditorContribution);
150-
bind(EditorContribution).to(CustomEditorContribution).inSingletonScope();
151-
unbind(MonacoStatusBarContribution);
152-
bind(MonacoStatusBarContribution).to(SilentMonacoStatusBarContribution).inSingletonScope();
153-
unbind(ApplicationShell);
154-
bind(ApplicationShell).to(CustomApplicationShell).inSingletonScope();
145+
if (!ARDUINO_PRO_MODE) {
146+
unbind(OutlineViewContribution);
147+
bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope();
148+
unbind(ProblemContribution);
149+
bind(ProblemContribution).to(SilentProblemContribution).inSingletonScope();
150+
unbind(FileNavigatorContribution);
151+
bind(FileNavigatorContribution).to(SilentNavigatorContribution).inSingletonScope();
152+
unbind(OutputToolbarContribution);
153+
bind(OutputToolbarContribution).to(ArduinoOutputToolContribution).inSingletonScope();
154+
unbind(EditorContribution);
155+
bind(EditorContribution).to(CustomEditorContribution).inSingletonScope();
156+
unbind(MonacoStatusBarContribution);
157+
bind(MonacoStatusBarContribution).to(SilentMonacoStatusBarContribution).inSingletonScope();
158+
unbind(ApplicationShell);
159+
bind(ApplicationShell).to(CustomApplicationShell).inSingletonScope();
160+
}
155161
unbind(FrontendApplication);
156162
bind(FrontendApplication).to(CustomFrontendApplication).inSingletonScope();
157163
});
Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,49 @@
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";
45

56
@injectable()
67
export class CustomCommonFrontendContribution extends CommonFrontendContribution {
78
registerMenus(registry: MenuModelRegistry): void {
8-
registry.registerSubmenu(CommonMenus.FILE, 'File');
9-
registry.registerSubmenu(CommonMenus.EDIT, 'Edit');
9+
if (!ARDUINO_PRO_MODE) {
10+
registry.registerSubmenu(CommonMenus.FILE, 'File');
11+
registry.registerSubmenu(CommonMenus.EDIT, 'Edit');
1012

11-
registry.registerSubmenu(CommonMenus.FILE_SETTINGS_SUBMENU, 'Settings');
13+
registry.registerSubmenu(CommonMenus.FILE_SETTINGS_SUBMENU, 'Settings');
1214

13-
registry.registerMenuAction(CommonMenus.EDIT_UNDO, {
14-
commandId: CommonCommands.UNDO.id,
15-
order: '0'
16-
});
17-
registry.registerMenuAction(CommonMenus.EDIT_UNDO, {
18-
commandId: CommonCommands.REDO.id,
19-
order: '1'
20-
});
15+
registry.registerMenuAction(CommonMenus.EDIT_UNDO, {
16+
commandId: CommonCommands.UNDO.id,
17+
order: '0'
18+
});
19+
registry.registerMenuAction(CommonMenus.EDIT_UNDO, {
20+
commandId: CommonCommands.REDO.id,
21+
order: '1'
22+
});
2123

22-
registry.registerMenuAction(CommonMenus.EDIT_FIND, {
23-
commandId: CommonCommands.FIND.id,
24-
order: '0'
25-
});
26-
registry.registerMenuAction(CommonMenus.EDIT_FIND, {
27-
commandId: CommonCommands.REPLACE.id,
28-
order: '1'
29-
});
24+
registry.registerMenuAction(CommonMenus.EDIT_FIND, {
25+
commandId: CommonCommands.FIND.id,
26+
order: '0'
27+
});
28+
registry.registerMenuAction(CommonMenus.EDIT_FIND, {
29+
commandId: CommonCommands.REPLACE.id,
30+
order: '1'
31+
});
3032

31-
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
32-
commandId: CommonCommands.CUT.id,
33-
order: '0'
34-
});
35-
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
36-
commandId: CommonCommands.COPY.id,
37-
order: '1'
38-
});
39-
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
40-
commandId: CommonCommands.PASTE.id,
41-
order: '2'
42-
});
33+
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
34+
commandId: CommonCommands.CUT.id,
35+
order: '0'
36+
});
37+
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
38+
commandId: CommonCommands.COPY.id,
39+
order: '1'
40+
});
41+
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
42+
commandId: CommonCommands.PASTE.id,
43+
order: '2'
44+
});
45+
} else {
46+
super.registerMenus(registry);
47+
}
4348
}
4449
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export class CustomFrontendApplication extends FrontendApplication {
99
protected readonly frontendContribution: ArduinoFrontendContribution;
1010

1111
protected async initializeLayout(): Promise<void> {
12+
await super.initializeLayout();
1213
const location = new URL(window.location.href);
1314
const sketchPath = location.searchParams.get('sketch');
1415
if (sketchPath) {

arduino-ide-extension/src/browser/customization/custom-monaco-editor-menu-contribution.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

arduino-ide-extension/src/browser/customization/silent-navigator-contribution.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ import { FrontendApplication } from "@theia/core/lib/browser";
55
@injectable()
66
export class SilentNavigatorContribution extends FileNavigatorContribution {
77
async initializeLayout(app: FrontendApplication): Promise<void> {
8-
// await this.openView();
98
}
109
}

arduino-ide-extension/src/browser/customization/silent-outline-contribution.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616

1717
import { injectable } from 'inversify';
1818
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
19+
import { FrontendApplication } from '@theia/core/lib/browser';
1920

2021
@injectable()
2122
export class SilentOutlineViewContribution extends OutlineViewContribution {
2223

23-
async initializeLayout(): Promise<void> {
24-
// await this.openView();
24+
async initializeLayout(app: FrontendApplication): Promise<void> {
2525
}
2626
}

arduino-ide-extension/src/browser/customization/silent-output-tool-contribution.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ import { injectable } from "inversify";
55
@injectable()
66
export class ArduinoOutputToolContribution extends OutputToolbarContribution {
77
async registerToolbarItems(toolbarRegistry: TabBarToolbarRegistry): Promise<void> {
8-
// register nothing
98
}
109
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import { injectable } from 'inversify';
22
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
33
import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager';
4+
import { FrontendApplication } from '@theia/core/lib/browser';
45

56
@injectable()
67
export class SilentProblemContribution extends ProblemContribution {
78

8-
async initializeLayout(): Promise<void> {
9-
// await this.openView();
9+
async initializeLayout(app: FrontendApplication): Promise<void> {
1010
}
1111

1212
protected setStatusBarElement(problemStat: ProblemStat) {
13-
1413
}
1514
}

0 commit comments

Comments
 (0)