diff --git a/arduino-ide-extension/src/browser/arduino-commands.ts b/arduino-ide-extension/src/browser/arduino-commands.ts index d07298d7..0875e04e 100644 --- a/arduino-ide-extension/src/browser/arduino-commands.ts +++ b/arduino-ide-extension/src/browser/arduino-commands.ts @@ -48,4 +48,8 @@ export namespace ArduinoCommands { id: "arduino-open-boards-dialog" } + export const TOGGLE_PROMODE: Command = { + id: "arduino-toggle-pro-mode" + } + } diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 6ae68ce1..fc29d7bd 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -20,7 +20,7 @@ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service import { SketchFactory } from './sketch-factory'; import { ArduinoToolbar } from './toolbar/arduino-toolbar'; import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser'; -import { ContextMenuRenderer, OpenerService, Widget, StatusBar } from '@theia/core/lib/browser'; +import { ContextMenuRenderer, OpenerService, Widget, StatusBar, ShellLayoutRestorer } from '@theia/core/lib/browser'; import { OpenFileDialogProps, FileDialogService } from '@theia/filesystem/lib/browser/file-dialog'; import { FileSystem, FileStat } from '@theia/filesystem/lib/common'; import { ArduinoToolbarContextMenu } from './arduino-file-menu'; @@ -40,6 +40,11 @@ export namespace ArduinoMenus { export const TOOLS = [...MAIN_MENU_BAR, '4_tools']; } +export const ARDUINO_PRO_MODE: boolean = (() => { + const proModeStr = window.localStorage.getItem('arduino-pro-mode'); + return proModeStr === 'true'; +})(); + @injectable() export class ArduinoFrontendContribution implements TabBarToolbarContribution, CommandContribution, MenuContribution { @@ -106,6 +111,9 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C @inject(StatusBar) protected readonly statusBar: StatusBar; + @inject(ShellLayoutRestorer) + protected readonly layoutRestorer: ShellLayoutRestorer; + protected boardsToolbarItem: BoardsToolBarItem | null; protected wsSketchCount: number = 0; @@ -272,6 +280,14 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C } } }) + registry.registerCommand(ArduinoCommands.TOGGLE_PROMODE, { + execute: () => { + const oldModeState = ARDUINO_PRO_MODE; + window.localStorage.setItem('arduino-pro-mode', oldModeState ? 'false' : 'true'); + registry.executeCommand('reset.layout'); + }, + isToggled: () => ARDUINO_PRO_MODE + }) } protected async selectBoard(board: Board) { @@ -280,25 +296,26 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C this.boardsToolbarItem.setSelectedBoard(board); } } - + registerMenus(registry: MenuModelRegistry) { - registry.unregisterMenuAction(FileSystemCommands.UPLOAD); - registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD); + if (!ARDUINO_PRO_MODE) { + registry.unregisterMenuAction(FileSystemCommands.UPLOAD); + registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD); - registry.unregisterMenuAction(WorkspaceCommands.NEW_FILE); - registry.unregisterMenuAction(WorkspaceCommands.NEW_FOLDER); - - registry.unregisterMenuAction(WorkspaceCommands.OPEN_FOLDER); - registry.unregisterMenuAction(WorkspaceCommands.OPEN_WORKSPACE); - registry.unregisterMenuAction(WorkspaceCommands.OPEN_RECENT_WORKSPACE); - registry.unregisterMenuAction(WorkspaceCommands.SAVE_WORKSPACE_AS); - registry.unregisterMenuAction(WorkspaceCommands.CLOSE); + registry.unregisterMenuAction(WorkspaceCommands.NEW_FILE); + registry.unregisterMenuAction(WorkspaceCommands.NEW_FOLDER); - registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(MonacoMenus.SELECTION)); - registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(EditorMainMenu.GO)); - registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(TerminalMenus.TERMINAL)); - registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.VIEW)); - registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.HELP)); + registry.unregisterMenuAction(WorkspaceCommands.OPEN_FOLDER); + registry.unregisterMenuAction(WorkspaceCommands.OPEN_WORKSPACE); + registry.unregisterMenuAction(WorkspaceCommands.OPEN_RECENT_WORKSPACE); + registry.unregisterMenuAction(WorkspaceCommands.SAVE_WORKSPACE_AS); + registry.unregisterMenuAction(WorkspaceCommands.CLOSE); + + registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(MonacoMenus.SELECTION)); + registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(EditorMainMenu.GO)); + registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(TerminalMenus.TERMINAL)); + registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.VIEW)); + } registry.registerSubmenu(ArduinoMenus.SKETCH, 'Sketch'); registry.registerMenuAction(ArduinoMenus.SKETCH, { @@ -317,6 +334,11 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C }); registry.registerSubmenu(ArduinoMenus.TOOLS, 'Tools'); + + registry.registerMenuAction(CommonMenus.HELP, { + commandId: ArduinoCommands.TOGGLE_PROMODE.id, + label: 'Advanced Mode' + }) } protected getMenuId(menuPath: string[]): string { diff --git a/arduino-ide-extension/src/browser/arduino-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-frontend-module.ts index dab0b003..729bc310 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-frontend-module.ts @@ -8,7 +8,7 @@ import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/w import { FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser/frontend-application' import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate'; import { LibraryListWidget } from './library/library-list-widget'; -import { ArduinoFrontendContribution } from './arduino-frontend-contribution'; +import { ArduinoFrontendContribution, ARDUINO_PRO_MODE } from './arduino-frontend-contribution'; import { ArduinoLanguageGrammarContribution } from './language/arduino-language-grammar-contribution'; import { LibraryService, LibraryServicePath } from '../common/protocol/library-service'; import { BoardsService, BoardsServicePath } from '../common/protocol/boards-service'; @@ -50,6 +50,10 @@ import { SelectBoardDialog, SelectBoardDialogProps } from './boards/select-board import { SelectBoardDialogWidget } from './boards/select-board-dialog-widget'; const ElementQueries = require('css-element-queries/src/ElementQueries'); +if (!ARDUINO_PRO_MODE) { + require('../../src/browser/style/silent-bottom-panel-tabs.css'); +} + export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => { ElementQueries.listen(); ElementQueries.init(); @@ -138,20 +142,22 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un themeService.register(...ArduinoTheme.themes); // customizing default theia - unbind(OutlineViewContribution); - bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope(); - unbind(ProblemContribution); - bind(ProblemContribution).to(SilentProblemContribution).inSingletonScope(); - unbind(FileNavigatorContribution); - bind(FileNavigatorContribution).to(SilentNavigatorContribution).inSingletonScope(); - unbind(OutputToolbarContribution); - bind(OutputToolbarContribution).to(ArduinoOutputToolContribution).inSingletonScope(); - unbind(EditorContribution); - bind(EditorContribution).to(CustomEditorContribution).inSingletonScope(); - unbind(MonacoStatusBarContribution); - bind(MonacoStatusBarContribution).to(SilentMonacoStatusBarContribution).inSingletonScope(); - unbind(ApplicationShell); - bind(ApplicationShell).to(CustomApplicationShell).inSingletonScope(); + if (!ARDUINO_PRO_MODE) { + unbind(OutlineViewContribution); + bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope(); + unbind(ProblemContribution); + bind(ProblemContribution).to(SilentProblemContribution).inSingletonScope(); + unbind(FileNavigatorContribution); + bind(FileNavigatorContribution).to(SilentNavigatorContribution).inSingletonScope(); + unbind(OutputToolbarContribution); + bind(OutputToolbarContribution).to(ArduinoOutputToolContribution).inSingletonScope(); + unbind(EditorContribution); + bind(EditorContribution).to(CustomEditorContribution).inSingletonScope(); + unbind(MonacoStatusBarContribution); + bind(MonacoStatusBarContribution).to(SilentMonacoStatusBarContribution).inSingletonScope(); + unbind(ApplicationShell); + bind(ApplicationShell).to(CustomApplicationShell).inSingletonScope(); + } unbind(FrontendApplication); bind(FrontendApplication).to(CustomFrontendApplication).inSingletonScope(); }); diff --git a/arduino-ide-extension/src/browser/customization/custom-common-frontend-contribution.ts b/arduino-ide-extension/src/browser/customization/custom-common-frontend-contribution.ts index 227ba0ff..9a0cd92d 100644 --- a/arduino-ide-extension/src/browser/customization/custom-common-frontend-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/custom-common-frontend-contribution.ts @@ -1,44 +1,49 @@ import { injectable } from "inversify"; import { CommonFrontendContribution, CommonMenus, CommonCommands } from "@theia/core/lib/browser"; import { MenuModelRegistry } from "@theia/core"; +import { ARDUINO_PRO_MODE } from "../arduino-frontend-contribution"; @injectable() export class CustomCommonFrontendContribution extends CommonFrontendContribution { registerMenus(registry: MenuModelRegistry): void { - registry.registerSubmenu(CommonMenus.FILE, 'File'); - registry.registerSubmenu(CommonMenus.EDIT, 'Edit'); + if (!ARDUINO_PRO_MODE) { + registry.registerSubmenu(CommonMenus.FILE, 'File'); + registry.registerSubmenu(CommonMenus.EDIT, 'Edit'); - registry.registerSubmenu(CommonMenus.FILE_SETTINGS_SUBMENU, 'Settings'); + registry.registerSubmenu(CommonMenus.FILE_SETTINGS_SUBMENU, 'Settings'); - registry.registerMenuAction(CommonMenus.EDIT_UNDO, { - commandId: CommonCommands.UNDO.id, - order: '0' - }); - registry.registerMenuAction(CommonMenus.EDIT_UNDO, { - commandId: CommonCommands.REDO.id, - order: '1' - }); + registry.registerMenuAction(CommonMenus.EDIT_UNDO, { + commandId: CommonCommands.UNDO.id, + order: '0' + }); + registry.registerMenuAction(CommonMenus.EDIT_UNDO, { + commandId: CommonCommands.REDO.id, + order: '1' + }); - registry.registerMenuAction(CommonMenus.EDIT_FIND, { - commandId: CommonCommands.FIND.id, - order: '0' - }); - registry.registerMenuAction(CommonMenus.EDIT_FIND, { - commandId: CommonCommands.REPLACE.id, - order: '1' - }); + registry.registerMenuAction(CommonMenus.EDIT_FIND, { + commandId: CommonCommands.FIND.id, + order: '0' + }); + registry.registerMenuAction(CommonMenus.EDIT_FIND, { + commandId: CommonCommands.REPLACE.id, + order: '1' + }); - registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { - commandId: CommonCommands.CUT.id, - order: '0' - }); - registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { - commandId: CommonCommands.COPY.id, - order: '1' - }); - registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { - commandId: CommonCommands.PASTE.id, - order: '2' - }); + registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { + commandId: CommonCommands.CUT.id, + order: '0' + }); + registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { + commandId: CommonCommands.COPY.id, + order: '1' + }); + registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { + commandId: CommonCommands.PASTE.id, + order: '2' + }); + } else { + super.registerMenus(registry); + } } } \ No newline at end of file diff --git a/arduino-ide-extension/src/browser/customization/custom-frontend-application.ts b/arduino-ide-extension/src/browser/customization/custom-frontend-application.ts index c3fb84d7..aa26c869 100644 --- a/arduino-ide-extension/src/browser/customization/custom-frontend-application.ts +++ b/arduino-ide-extension/src/browser/customization/custom-frontend-application.ts @@ -9,6 +9,7 @@ export class CustomFrontendApplication extends FrontendApplication { protected readonly frontendContribution: ArduinoFrontendContribution; protected async initializeLayout(): Promise { + await super.initializeLayout(); const location = new URL(window.location.href); const sketchPath = location.searchParams.get('sketch'); if (sketchPath) { diff --git a/arduino-ide-extension/src/browser/customization/custom-monaco-editor-menu-contribution.ts b/arduino-ide-extension/src/browser/customization/custom-monaco-editor-menu-contribution.ts deleted file mode 100644 index 42165f2f..00000000 --- a/arduino-ide-extension/src/browser/customization/custom-monaco-editor-menu-contribution.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { injectable } from "inversify"; -import { MonacoEditorMenuContribution } from "@theia/monaco/lib/browser/monaco-menu"; -import { MenuModelRegistry } from "@theia/core"; - -@injectable() -export class CustomMonacoEditorMenuContribution extends MonacoEditorMenuContribution { - registerMenus(registry: MenuModelRegistry) { - - } -} \ No newline at end of file diff --git a/arduino-ide-extension/src/browser/customization/silent-navigator-contribution.ts b/arduino-ide-extension/src/browser/customization/silent-navigator-contribution.ts index d7d42131..0ef0412b 100644 --- a/arduino-ide-extension/src/browser/customization/silent-navigator-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/silent-navigator-contribution.ts @@ -5,6 +5,5 @@ import { FrontendApplication } from "@theia/core/lib/browser"; @injectable() export class SilentNavigatorContribution extends FileNavigatorContribution { async initializeLayout(app: FrontendApplication): Promise { - // await this.openView(); } } \ No newline at end of file diff --git a/arduino-ide-extension/src/browser/customization/silent-outline-contribution.ts b/arduino-ide-extension/src/browser/customization/silent-outline-contribution.ts index 99c5f672..87535ebb 100644 --- a/arduino-ide-extension/src/browser/customization/silent-outline-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/silent-outline-contribution.ts @@ -16,11 +16,11 @@ import { injectable } from 'inversify'; import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; +import { FrontendApplication } from '@theia/core/lib/browser'; @injectable() export class SilentOutlineViewContribution extends OutlineViewContribution { - async initializeLayout(): Promise { - // await this.openView(); + async initializeLayout(app: FrontendApplication): Promise { } } diff --git a/arduino-ide-extension/src/browser/customization/silent-output-tool-contribution.ts b/arduino-ide-extension/src/browser/customization/silent-output-tool-contribution.ts index 84e37186..c29cc066 100644 --- a/arduino-ide-extension/src/browser/customization/silent-output-tool-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/silent-output-tool-contribution.ts @@ -5,6 +5,5 @@ import { injectable } from "inversify"; @injectable() export class ArduinoOutputToolContribution extends OutputToolbarContribution { async registerToolbarItems(toolbarRegistry: TabBarToolbarRegistry): Promise { - // register nothing } } \ No newline at end of file diff --git a/arduino-ide-extension/src/browser/customization/silent-problem-contribution.ts b/arduino-ide-extension/src/browser/customization/silent-problem-contribution.ts index 0d3beac7..b468d406 100644 --- a/arduino-ide-extension/src/browser/customization/silent-problem-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/silent-problem-contribution.ts @@ -1,15 +1,14 @@ import { injectable } from 'inversify'; import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager'; +import { FrontendApplication } from '@theia/core/lib/browser'; @injectable() export class SilentProblemContribution extends ProblemContribution { - async initializeLayout(): Promise { - // await this.openView(); + async initializeLayout(app: FrontendApplication): Promise { } protected setStatusBarElement(problemStat: ProblemStat) { - } } diff --git a/arduino-ide-extension/src/browser/menu/arduino-menu-contribution.ts b/arduino-ide-extension/src/browser/menu/arduino-menu-contribution.ts index 464f4b6b..704f2c69 100644 --- a/arduino-ide-extension/src/browser/menu/arduino-menu-contribution.ts +++ b/arduino-ide-extension/src/browser/menu/arduino-menu-contribution.ts @@ -5,7 +5,7 @@ import { FrontendApplication } from "@theia/core/lib/browser"; @injectable() export class ArduinoMenuContribution extends BrowserMenuBarContribution { onStart(app: FrontendApplication): void { - const menu = this.factory.createMenuBar(); - app.shell.addWidget(menu, { area: 'top' }); + const menu = this.factory.createMenuBar(); + app.shell.addWidget(menu, { area: 'top' }); } } \ No newline at end of file diff --git a/arduino-ide-extension/src/browser/style/arduino.useable.css b/arduino-ide-extension/src/browser/style/arduino.useable.css index 04013ffa..2e611e17 100644 --- a/arduino-ide-extension/src/browser/style/arduino.useable.css +++ b/arduino-ide-extension/src/browser/style/arduino.useable.css @@ -77,7 +77,7 @@ is not optimized for dense, information rich UIs. /* Main layout colors (bright to dark) ------------------------------------ */ --theia-layout-color0: #ffffff; - --theia-layout-color1: var(--theia-arduino-light1); + --theia-layout-color1: #f7f9f9; --theia-layout-color2: #ececec; --theia-layout-color3: var(--theia-arduino-light); --theia-layout-color4: #dcdcdc; diff --git a/arduino-ide-extension/src/browser/style/browser-menu.css b/arduino-ide-extension/src/browser/style/browser-menu.css index 3197a46e..eed004c9 100644 --- a/arduino-ide-extension/src/browser/style/browser-menu.css +++ b/arduino-ide-extension/src/browser/style/browser-menu.css @@ -3,7 +3,7 @@ flex-direction: column; } -.p-TabBar-toolbar { +#theia-top-panel .p-TabBar-toolbar { justify-content: flex-end; margin: 0; padding-left: 10px; diff --git a/arduino-ide-extension/src/browser/style/main.css b/arduino-ide-extension/src/browser/style/main.css index c222ab27..f60d6c95 100644 --- a/arduino-ide-extension/src/browser/style/main.css +++ b/arduino-ide-extension/src/browser/style/main.css @@ -75,10 +75,6 @@ padding-right: 15px; } -.p-Widget.p-TabBar.theia-app-centers.theia-app-bottom .p-TabBar-content-container.ps { - display: none; -} - .arduino-toolbar-tooltip { margin-left: 10px; display: flex; diff --git a/arduino-ide-extension/src/browser/style/silent-bottom-panel-tabs.css b/arduino-ide-extension/src/browser/style/silent-bottom-panel-tabs.css new file mode 100644 index 00000000..8ca965bb --- /dev/null +++ b/arduino-ide-extension/src/browser/style/silent-bottom-panel-tabs.css @@ -0,0 +1,3 @@ +.p-Widget.p-TabBar.theia-app-centers.theia-app-bottom .p-TabBar-content-container.ps { + display: none; +} \ No newline at end of file