Update Electron main menu when a toggle button is switched

This commit is contained in:
Miro Spönemann 2020-02-26 09:43:32 +01:00
parent f6a8dceabc
commit 69c7383da8
3 changed files with 30 additions and 3 deletions

View File

@ -301,7 +301,10 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
}); });
registry.registerCommand(ArduinoCommands.TOGGLE_COMPILE_FOR_DEBUG, { registry.registerCommand(ArduinoCommands.TOGGLE_COMPILE_FOR_DEBUG, {
execute: () => this.editorMode.toggleCompileForDebug(), execute: () => {
this.editorMode.toggleCompileForDebug();
this.editorMode.menuContentChanged.fire();
},
isToggled: () => this.editorMode.compileForDebug isToggled: () => this.editorMode.compileForDebug
}); });
@ -416,7 +419,10 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
}); });
registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, { registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, {
execute: () => this.editorMode.toggleProMode(), execute: () => {
this.editorMode.toggleProMode();
this.editorMode.menuContentChanged.fire();
},
isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right', isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right',
isToggled: () => this.editorMode.proMode isToggled: () => this.editorMode.proMode
}); });

View File

@ -1,4 +1,5 @@
import { injectable } from 'inversify'; import { injectable } from 'inversify';
import { Emitter } from '@theia/core/lib/common/event';
import { ApplicationShell, FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser'; import { ApplicationShell, FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser';
import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer'; import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer';
import { OutputWidget } from '@theia/output/lib/browser/output-widget'; import { OutputWidget } from '@theia/output/lib/browser/output-widget';
@ -7,6 +8,8 @@ import { EditorWidget } from '@theia/editor/lib/browser';
@injectable() @injectable()
export class EditorMode implements FrontendApplicationContribution { export class EditorMode implements FrontendApplicationContribution {
readonly menuContentChanged = new Emitter<void>();
protected app: FrontendApplication; protected app: FrontendApplication;
onStart(app: FrontendApplication): void { onStart(app: FrontendApplication): void {

View File

@ -1,9 +1,27 @@
import { injectable } from 'inversify'; import * as electron from 'electron';
import { injectable, inject, postConstruct } from 'inversify';
import { isOSX } from '@theia/core/lib/common/os';
import { ElectronMenuContribution } from '@theia/core/lib/electron-browser/menu/electron-menu-contribution'; import { ElectronMenuContribution } from '@theia/core/lib/electron-browser/menu/electron-menu-contribution';
import { EditorMode } from '../browser/editor-mode';
@injectable() @injectable()
export class ElectronArduinoMenuContribution extends ElectronMenuContribution { export class ElectronArduinoMenuContribution extends ElectronMenuContribution {
@inject(EditorMode)
protected readonly editorMode: EditorMode;
@postConstruct()
protected init(): void {
this.editorMode.menuContentChanged.event(() => {
const createdMenuBar = this.factory.createMenuBar();
if (isOSX) {
electron.remote.Menu.setApplicationMenu(createdMenuBar);
} else {
electron.remote.getCurrentWindow().setMenu(createdMenuBar);
}
});
}
protected hideTopPanel(): void { protected hideTopPanel(): void {
// NOOP // NOOP
// We reuse the `div` for the Arduino toolbar. // We reuse the `div` for the Arduino toolbar.