One can toggle between pro and simple mode

Signed-off-by: jbicker <jan.bicker@typefox.io>
This commit is contained in:
jbicker 2019-07-24 19:09:55 +02:00
parent 17fab651e5
commit 23a967bd4c
15 changed files with 112 additions and 88 deletions

View File

@ -48,4 +48,8 @@ export namespace ArduinoCommands {
id: "arduino-open-boards-dialog" id: "arduino-open-boards-dialog"
} }
export const TOGGLE_PROMODE: Command = {
id: "arduino-toggle-pro-mode"
}
} }

View File

@ -20,7 +20,7 @@ import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service
import { SketchFactory } from './sketch-factory'; import { SketchFactory } from './sketch-factory';
import { ArduinoToolbar } from './toolbar/arduino-toolbar'; import { ArduinoToolbar } from './toolbar/arduino-toolbar';
import { EditorManager, EditorMainMenu } from '@theia/editor/lib/browser'; 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 { OpenFileDialogProps, FileDialogService } from '@theia/filesystem/lib/browser/file-dialog';
import { FileSystem, FileStat } from '@theia/filesystem/lib/common'; import { FileSystem, FileStat } from '@theia/filesystem/lib/common';
import { ArduinoToolbarContextMenu } from './arduino-file-menu'; import { ArduinoToolbarContextMenu } from './arduino-file-menu';
@ -40,6 +40,11 @@ export namespace ArduinoMenus {
export const TOOLS = [...MAIN_MENU_BAR, '4_tools']; 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() @injectable()
export class ArduinoFrontendContribution implements TabBarToolbarContribution, CommandContribution, MenuContribution { export class ArduinoFrontendContribution implements TabBarToolbarContribution, CommandContribution, MenuContribution {
@ -106,6 +111,9 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
@inject(StatusBar) @inject(StatusBar)
protected readonly statusBar: StatusBar; protected readonly statusBar: StatusBar;
@inject(ShellLayoutRestorer)
protected readonly layoutRestorer: ShellLayoutRestorer;
protected boardsToolbarItem: BoardsToolBarItem | null; protected boardsToolbarItem: BoardsToolBarItem | null;
protected wsSketchCount: number = 0; 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) { protected async selectBoard(board: Board) {
@ -280,25 +296,26 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
this.boardsToolbarItem.setSelectedBoard(board); this.boardsToolbarItem.setSelectedBoard(board);
} }
} }
registerMenus(registry: MenuModelRegistry) { registerMenus(registry: MenuModelRegistry) {
registry.unregisterMenuAction(FileSystemCommands.UPLOAD); if (!ARDUINO_PRO_MODE) {
registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD); registry.unregisterMenuAction(FileSystemCommands.UPLOAD);
registry.unregisterMenuAction(FileDownloadCommands.DOWNLOAD);
registry.unregisterMenuAction(WorkspaceCommands.NEW_FILE); registry.unregisterMenuAction(WorkspaceCommands.NEW_FILE);
registry.unregisterMenuAction(WorkspaceCommands.NEW_FOLDER); 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.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(MonacoMenus.SELECTION)); registry.unregisterMenuAction(WorkspaceCommands.OPEN_FOLDER);
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(EditorMainMenu.GO)); registry.unregisterMenuAction(WorkspaceCommands.OPEN_WORKSPACE);
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(TerminalMenus.TERMINAL)); registry.unregisterMenuAction(WorkspaceCommands.OPEN_RECENT_WORKSPACE);
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.VIEW)); registry.unregisterMenuAction(WorkspaceCommands.SAVE_WORKSPACE_AS);
registry.getMenu(MAIN_MENU_BAR).removeNode(this.getMenuId(CommonMenus.HELP)); 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.registerSubmenu(ArduinoMenus.SKETCH, 'Sketch');
registry.registerMenuAction(ArduinoMenus.SKETCH, { registry.registerMenuAction(ArduinoMenus.SKETCH, {
@ -317,6 +334,11 @@ export class ArduinoFrontendContribution implements TabBarToolbarContribution, C
}); });
registry.registerSubmenu(ArduinoMenus.TOOLS, 'Tools'); registry.registerSubmenu(ArduinoMenus.TOOLS, 'Tools');
registry.registerMenuAction(CommonMenus.HELP, {
commandId: ArduinoCommands.TOGGLE_PROMODE.id,
label: 'Advanced Mode'
})
} }
protected getMenuId(menuPath: string[]): string { protected getMenuId(menuPath: string[]): string {

View File

@ -8,7 +8,7 @@ import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/w
import { FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser/frontend-application' import { FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser/frontend-application'
import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate'; import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate';
import { LibraryListWidget } from './library/library-list-widget'; 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 { ArduinoLanguageGrammarContribution } from './language/arduino-language-grammar-contribution';
import { LibraryService, LibraryServicePath } from '../common/protocol/library-service'; import { LibraryService, LibraryServicePath } from '../common/protocol/library-service';
import { BoardsService, BoardsServicePath } from '../common/protocol/boards-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'; import { SelectBoardDialogWidget } from './boards/select-board-dialog-widget';
const ElementQueries = require('css-element-queries/src/ElementQueries'); 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) => { export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Unbind, isBound: interfaces.IsBound, rebind: interfaces.Rebind) => {
ElementQueries.listen(); ElementQueries.listen();
ElementQueries.init(); ElementQueries.init();
@ -138,20 +142,22 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
themeService.register(...ArduinoTheme.themes); themeService.register(...ArduinoTheme.themes);
// customizing default theia // customizing default theia
unbind(OutlineViewContribution); if (!ARDUINO_PRO_MODE) {
bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope(); unbind(OutlineViewContribution);
unbind(ProblemContribution); bind(OutlineViewContribution).to(SilentOutlineViewContribution).inSingletonScope();
bind(ProblemContribution).to(SilentProblemContribution).inSingletonScope(); unbind(ProblemContribution);
unbind(FileNavigatorContribution); bind(ProblemContribution).to(SilentProblemContribution).inSingletonScope();
bind(FileNavigatorContribution).to(SilentNavigatorContribution).inSingletonScope(); unbind(FileNavigatorContribution);
unbind(OutputToolbarContribution); bind(FileNavigatorContribution).to(SilentNavigatorContribution).inSingletonScope();
bind(OutputToolbarContribution).to(ArduinoOutputToolContribution).inSingletonScope(); unbind(OutputToolbarContribution);
unbind(EditorContribution); bind(OutputToolbarContribution).to(ArduinoOutputToolContribution).inSingletonScope();
bind(EditorContribution).to(CustomEditorContribution).inSingletonScope(); unbind(EditorContribution);
unbind(MonacoStatusBarContribution); bind(EditorContribution).to(CustomEditorContribution).inSingletonScope();
bind(MonacoStatusBarContribution).to(SilentMonacoStatusBarContribution).inSingletonScope(); unbind(MonacoStatusBarContribution);
unbind(ApplicationShell); bind(MonacoStatusBarContribution).to(SilentMonacoStatusBarContribution).inSingletonScope();
bind(ApplicationShell).to(CustomApplicationShell).inSingletonScope(); unbind(ApplicationShell);
bind(ApplicationShell).to(CustomApplicationShell).inSingletonScope();
}
unbind(FrontendApplication); unbind(FrontendApplication);
bind(FrontendApplication).to(CustomFrontendApplication).inSingletonScope(); bind(FrontendApplication).to(CustomFrontendApplication).inSingletonScope();
}); });

View File

@ -1,44 +1,49 @@
import { injectable } from "inversify"; import { injectable } from "inversify";
import { CommonFrontendContribution, CommonMenus, CommonCommands } from "@theia/core/lib/browser"; import { CommonFrontendContribution, CommonMenus, CommonCommands } from "@theia/core/lib/browser";
import { MenuModelRegistry } from "@theia/core"; import { MenuModelRegistry } from "@theia/core";
import { ARDUINO_PRO_MODE } from "../arduino-frontend-contribution";
@injectable() @injectable()
export class CustomCommonFrontendContribution extends CommonFrontendContribution { export class CustomCommonFrontendContribution extends CommonFrontendContribution {
registerMenus(registry: MenuModelRegistry): void { registerMenus(registry: MenuModelRegistry): void {
registry.registerSubmenu(CommonMenus.FILE, 'File'); if (!ARDUINO_PRO_MODE) {
registry.registerSubmenu(CommonMenus.EDIT, 'Edit'); 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, { registry.registerMenuAction(CommonMenus.EDIT_UNDO, {
commandId: CommonCommands.UNDO.id, commandId: CommonCommands.UNDO.id,
order: '0' order: '0'
}); });
registry.registerMenuAction(CommonMenus.EDIT_UNDO, { registry.registerMenuAction(CommonMenus.EDIT_UNDO, {
commandId: CommonCommands.REDO.id, commandId: CommonCommands.REDO.id,
order: '1' order: '1'
}); });
registry.registerMenuAction(CommonMenus.EDIT_FIND, { registry.registerMenuAction(CommonMenus.EDIT_FIND, {
commandId: CommonCommands.FIND.id, commandId: CommonCommands.FIND.id,
order: '0' order: '0'
}); });
registry.registerMenuAction(CommonMenus.EDIT_FIND, { registry.registerMenuAction(CommonMenus.EDIT_FIND, {
commandId: CommonCommands.REPLACE.id, commandId: CommonCommands.REPLACE.id,
order: '1' order: '1'
}); });
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
commandId: CommonCommands.CUT.id, commandId: CommonCommands.CUT.id,
order: '0' order: '0'
}); });
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
commandId: CommonCommands.COPY.id, commandId: CommonCommands.COPY.id,
order: '1' order: '1'
}); });
registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, { registry.registerMenuAction(CommonMenus.EDIT_CLIPBOARD, {
commandId: CommonCommands.PASTE.id, commandId: CommonCommands.PASTE.id,
order: '2' order: '2'
}); });
} else {
super.registerMenus(registry);
}
} }
} }

View File

@ -9,6 +9,7 @@ export class CustomFrontendApplication extends FrontendApplication {
protected readonly frontendContribution: ArduinoFrontendContribution; protected readonly frontendContribution: ArduinoFrontendContribution;
protected async initializeLayout(): Promise<void> { protected async initializeLayout(): Promise<void> {
await super.initializeLayout();
const location = new URL(window.location.href); const location = new URL(window.location.href);
const sketchPath = location.searchParams.get('sketch'); const sketchPath = location.searchParams.get('sketch');
if (sketchPath) { if (sketchPath) {

View File

@ -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) {
}
}

View File

@ -5,6 +5,5 @@ import { FrontendApplication } from "@theia/core/lib/browser";
@injectable() @injectable()
export class SilentNavigatorContribution extends FileNavigatorContribution { export class SilentNavigatorContribution extends FileNavigatorContribution {
async initializeLayout(app: FrontendApplication): Promise<void> { async initializeLayout(app: FrontendApplication): Promise<void> {
// await this.openView();
} }
} }

View File

@ -16,11 +16,11 @@
import { injectable } from 'inversify'; import { injectable } from 'inversify';
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
import { FrontendApplication } from '@theia/core/lib/browser';
@injectable() @injectable()
export class SilentOutlineViewContribution extends OutlineViewContribution { export class SilentOutlineViewContribution extends OutlineViewContribution {
async initializeLayout(): Promise<void> { async initializeLayout(app: FrontendApplication): Promise<void> {
// await this.openView();
} }
} }

View File

@ -5,6 +5,5 @@ import { injectable } from "inversify";
@injectable() @injectable()
export class ArduinoOutputToolContribution extends OutputToolbarContribution { export class ArduinoOutputToolContribution extends OutputToolbarContribution {
async registerToolbarItems(toolbarRegistry: TabBarToolbarRegistry): Promise<void> { async registerToolbarItems(toolbarRegistry: TabBarToolbarRegistry): Promise<void> {
// register nothing
} }
} }

View File

@ -1,15 +1,14 @@
import { injectable } from 'inversify'; import { injectable } from 'inversify';
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager'; import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager';
import { FrontendApplication } from '@theia/core/lib/browser';
@injectable() @injectable()
export class SilentProblemContribution extends ProblemContribution { export class SilentProblemContribution extends ProblemContribution {
async initializeLayout(): Promise<void> { async initializeLayout(app: FrontendApplication): Promise<void> {
// await this.openView();
} }
protected setStatusBarElement(problemStat: ProblemStat) { protected setStatusBarElement(problemStat: ProblemStat) {
} }
} }

View File

@ -5,7 +5,7 @@ import { FrontendApplication } from "@theia/core/lib/browser";
@injectable() @injectable()
export class ArduinoMenuContribution extends BrowserMenuBarContribution { export class ArduinoMenuContribution extends BrowserMenuBarContribution {
onStart(app: FrontendApplication): void { onStart(app: FrontendApplication): void {
const menu = this.factory.createMenuBar(); const menu = this.factory.createMenuBar();
app.shell.addWidget(menu, { area: 'top' }); app.shell.addWidget(menu, { area: 'top' });
} }
} }

View File

@ -77,7 +77,7 @@ is not optimized for dense, information rich UIs.
/* Main layout colors (bright to dark) /* Main layout colors (bright to dark)
------------------------------------ */ ------------------------------------ */
--theia-layout-color0: #ffffff; --theia-layout-color0: #ffffff;
--theia-layout-color1: var(--theia-arduino-light1); --theia-layout-color1: #f7f9f9;
--theia-layout-color2: #ececec; --theia-layout-color2: #ececec;
--theia-layout-color3: var(--theia-arduino-light); --theia-layout-color3: var(--theia-arduino-light);
--theia-layout-color4: #dcdcdc; --theia-layout-color4: #dcdcdc;

View File

@ -3,7 +3,7 @@
flex-direction: column; flex-direction: column;
} }
.p-TabBar-toolbar { #theia-top-panel .p-TabBar-toolbar {
justify-content: flex-end; justify-content: flex-end;
margin: 0; margin: 0;
padding-left: 10px; padding-left: 10px;

View File

@ -75,10 +75,6 @@
padding-right: 15px; padding-right: 15px;
} }
.p-Widget.p-TabBar.theia-app-centers.theia-app-bottom .p-TabBar-content-container.ps {
display: none;
}
.arduino-toolbar-tooltip { .arduino-toolbar-tooltip {
margin-left: 10px; margin-left: 10px;
display: flex; display: flex;

View File

@ -0,0 +1,3 @@
.p-Widget.p-TabBar.theia-app-centers.theia-app-bottom .p-TabBar-content-container.ps {
display: none;
}