diff --git a/arduino-ide-extension/src/browser/contributions/contribution.ts b/arduino-ide-extension/src/browser/contributions/contribution.ts index 248315d1..f99cb8a7 100644 --- a/arduino-ide-extension/src/browser/contributions/contribution.ts +++ b/arduino-ide-extension/src/browser/contributions/contribution.ts @@ -3,8 +3,10 @@ import URI from '@theia/core/lib/common/uri'; import { ILogger } from '@theia/core/lib/common/logger'; import { notEmpty } from '@theia/core/lib/common/objects'; import { FileSystem } from '@theia/filesystem/lib/common'; +import { LabelProvider } from '@theia/core/lib/browser/label-provider'; import { MessageService } from '@theia/core/lib/common/message-service'; import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service'; +import { open, OpenerService } from '@theia/core/lib/browser/opener-service'; import { MenuModelRegistry, MenuContribution } from '@theia/core/lib/common/menu'; import { KeybindingRegistry, KeybindingContribution } from '@theia/core/lib/browser/keybinding'; import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar'; @@ -12,7 +14,7 @@ import { Command, CommandRegistry, CommandContribution, CommandService } from '@ import { SketchesService, ConfigService, FileSystemExt, Sketch } from '../../common/protocol'; import { EditorMode } from '../editor-mode'; -export { Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry, URI, Sketch }; +export { Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry, URI, Sketch, open }; @injectable() export abstract class Contribution implements CommandContribution, MenuContribution, KeybindingContribution, TabBarToolbarContribution { @@ -32,6 +34,9 @@ export abstract class Contribution implements CommandContribution, MenuContribut @inject(EditorMode) protected readonly editorMode: EditorMode; + @inject(LabelProvider) + protected readonly labelProvider: LabelProvider; + registerCommands(registry: CommandRegistry): void { } @@ -61,6 +66,9 @@ export abstract class SketchContribution extends Contribution { @inject(SketchesService) protected readonly sketchService: SketchesService; + @inject(OpenerService) + protected readonly openerService: OpenerService; + protected async currentSketch(): Promise { const sketches = (await Promise.all(this.workspaceService.tryGetRoots().map(({ uri }) => this.sketchService.getSketchFolder(uri)))).filter(notEmpty); if (!sketches.length) { diff --git a/arduino-ide-extension/src/browser/contributions/open-sketch.ts b/arduino-ide-extension/src/browser/contributions/open-sketch.ts index fb471f9c..74323009 100644 --- a/arduino-ide-extension/src/browser/contributions/open-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/open-sketch.ts @@ -16,6 +16,8 @@ export class OpenSketch extends SketchContribution { @inject(ContextMenuRenderer) protected readonly contextMenuRenderer: ContextMenuRenderer; + protected readonly toDisposeBeforeCreateNewContextMenu = new DisposableCollection(); + registerCommands(registry: CommandRegistry): void { registry.registerCommand(OpenSketch.Commands.OPEN_SKETCH, { execute: arg => Sketch.is(arg) ? this.openSketch(arg) : this.openSketch() @@ -27,7 +29,7 @@ export class OpenSketch extends SketchContribution { if (!sketches.length) { this.openSketch(); } else { - + this.toDisposeBeforeCreateNewContextMenu.dispose(); if (!(target instanceof HTMLElement)) { return; } @@ -36,29 +38,27 @@ export class OpenSketch extends SketchContribution { return; } - const toDisposeOnHide = new DisposableCollection(); this.menuRegistry.registerMenuAction(ArduinoMenus.OPEN_SKETCH__CONTEXT__OPEN_GROUP, { commandId: OpenSketch.Commands.OPEN_SKETCH.id, label: 'Open...' }); - toDisposeOnHide.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(OpenSketch.Commands.OPEN_SKETCH))); + this.toDisposeBeforeCreateNewContextMenu.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(OpenSketch.Commands.OPEN_SKETCH))); for (const sketch of sketches) { const command = { id: `arduino-open-sketch--${sketch.uri}` }; const handler = { execute: () => this.openSketch(sketch) }; - toDisposeOnHide.push(registry.registerCommand(command, handler)); + this.toDisposeBeforeCreateNewContextMenu.push(registry.registerCommand(command, handler)); this.menuRegistry.registerMenuAction(ArduinoMenus.OPEN_SKETCH__CONTEXT__RECENT_GROUP, { commandId: command.id, label: sketch.name }); - toDisposeOnHide.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(command))); + this.toDisposeBeforeCreateNewContextMenu.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(command))); } const options = { menuPath: ArduinoMenus.OPEN_SKETCH__CONTEXT, anchor: { x: parentElement.getBoundingClientRect().left, y: parentElement.getBoundingClientRect().top + parentElement.offsetHeight - }, - onHide: () => toDisposeOnHide.dispose() + } } this.contextMenuRenderer.render(options); } diff --git a/arduino-ide-extension/src/browser/contributions/settings.ts b/arduino-ide-extension/src/browser/contributions/settings.ts index 9c3a5845..a1e899aa 100644 --- a/arduino-ide-extension/src/browser/contributions/settings.ts +++ b/arduino-ide-extension/src/browser/contributions/settings.ts @@ -1,15 +1,11 @@ -import { inject, injectable } from 'inversify'; -import { open, OpenerService } from '@theia/core/lib/browser/opener-service'; +import { injectable } from 'inversify'; import { CommonCommands } from '@theia/core/lib/browser/common-frontend-contribution'; -import { URI, Command, MenuModelRegistry, CommandRegistry, SketchContribution } from './contribution'; +import { URI, Command, MenuModelRegistry, CommandRegistry, SketchContribution, open } from './contribution'; import { ArduinoMenus } from '../menu/arduino-menus'; @injectable() export class Settings extends SketchContribution { - @inject(OpenerService) - protected readonly openerService: OpenerService; - registerCommands(registry: CommandRegistry): void { registry.registerCommand(Settings.Commands.OPEN_CLI_CONFIG, { execute: () => this.configService.getCliConfigFileUri().then(uri => open(this.openerService, new URI(uri))) diff --git a/arduino-ide-extension/src/browser/contributions/sketch-control.ts b/arduino-ide-extension/src/browser/contributions/sketch-control.ts index 5251ad00..0c369799 100644 --- a/arduino-ide-extension/src/browser/contributions/sketch-control.ts +++ b/arduino-ide-extension/src/browser/contributions/sketch-control.ts @@ -5,7 +5,7 @@ import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shel import { WorkspaceCommands } from '@theia/workspace/lib/browser'; import { ContextMenuRenderer } from '@theia/core/lib/browser/context-menu-renderer'; import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable'; -import { URI, SketchContribution, Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry } from './contribution'; +import { URI, SketchContribution, Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry, TabBarToolbarRegistry, open } from './contribution'; import { ArduinoMenus } from '../menu/arduino-menus'; @injectable() @@ -23,11 +23,13 @@ export class SketchControl extends SketchContribution { @inject(ContextMenuRenderer) protected readonly contextMenuRenderer: ContextMenuRenderer; + protected readonly toDisposeBeforeCreateNewContextMenu = new DisposableCollection(); + registerCommands(registry: CommandRegistry): void { registry.registerCommand(SketchControl.Commands.OPEN_SKETCH_CONTROL__TOOLBAR, { isVisible: widget => this.shell.getWidgets('main').indexOf(widget) !== -1, execute: async () => { - const toDisposeOnHide = new DisposableCollection(); + this.toDisposeBeforeCreateNewContextMenu.dispose(); const sketch = await this.currentSketch(); if (!sketch) { return; @@ -47,28 +49,21 @@ export class SketchControl extends SketchContribution { for (let i = 0; i < uris.length; i++) { const uri = new URI(uris[i]); const command = { id: `arduino-focus-file--${uri.toString()}` }; - const handler = { - execute: () => { - console.log('bar'); - this.editorManager.open(uri, { mode: 'activate' }); - console.log('foo'); - } - }; - toDisposeOnHide.push(registry.registerCommand(command, handler)); + const handler = { execute: () => open(this.openerService, uri) }; + this.toDisposeBeforeCreateNewContextMenu.push(registry.registerCommand(command, handler)); this.menuRegistry.registerMenuAction(ArduinoMenus.SKETCH_CONTROL__CONTEXT__RESOURCES_GROUP, { commandId: command.id, - label: uri.path.base, + label: this.labelProvider.getName(uri), order: `${i}` }); - toDisposeOnHide.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(command))); + this.toDisposeBeforeCreateNewContextMenu.push(Disposable.create(() => this.menuRegistry.unregisterMenuAction(command))); } const options = { menuPath: ArduinoMenus.SKETCH_CONTROL__CONTEXT, anchor: { x: parentElement.getBoundingClientRect().left, y: parentElement.getBoundingClientRect().top + parentElement.offsetHeight - }, - onHide: () => toDisposeOnHide.dispose() + } } this.contextMenuRenderer.render(options); } diff --git a/arduino-ide-extension/src/browser/style/main.css b/arduino-ide-extension/src/browser/style/main.css index f350cf5e..0cde7e13 100644 --- a/arduino-ide-extension/src/browser/style/main.css +++ b/arduino-ide-extension/src/browser/style/main.css @@ -147,7 +147,7 @@ } #arduino-open-sketch-control--toolbar { - background-color: var(--theia-button-background); + background-color: var(--theia-tab-inactiveBackground); border: 1px solid var(--theia-arduino-toolbar-background); - padding: 2px 0px 2px 8px; + padding: 2px 0px 2px 9px; }