[atl-1433][atl-1433] improve local sketchbook explorer (#446)

This commit is contained in:
Francesco Stasi
2021-07-21 15:48:15 +02:00
committed by GitHub
parent 4e6f9ae75d
commit 4da5d573e4
6 changed files with 287 additions and 43 deletions

View File

@@ -14,7 +14,10 @@ import { SketchbookCommands } from './sketchbook-commands';
import { WorkspaceService } from '../../theia/workspace/workspace-service';
import {
ContextMenuRenderer,
Navigatable,
RenderContextMenuOptions,
SelectableTreeNode,
Widget,
} from '@theia/core/lib/browser';
import {
Disposable,
@@ -77,6 +80,10 @@ export class SketchbookWidgetContribution
}
onStart(): void {
this.shell.currentChanged.connect(() =>
this.onCurrentWidgetChangedHandler()
);
this.arduinoPreferences.onPreferenceChanged(({ preferenceName }) => {
if (preferenceName === 'arduino.sketchbook.showAllFiles') {
this.mainMenuManager.update();
@@ -196,4 +203,27 @@ export class SketchbookWidgetContribution
order: '0',
});
}
/**
* Reveals and selects node in the file navigator to which given widget is related.
* Does nothing if given widget undefined or doesn't have related resource.
*
* @param widget widget file resource of which should be revealed and selected
*/
async selectWidgetFileNode(widget: Widget | undefined): Promise<void> {
if (Navigatable.is(widget)) {
const resourceUri = widget.getResourceUri();
if (resourceUri) {
const { model } = (await this.widget).getTreeWidget();
const node = await model.revealFile(resourceUri);
if (SelectableTreeNode.is(node)) {
model.selectNode(node);
}
}
}
}
protected onCurrentWidgetChangedHandler(): void {
this.selectWidgetFileNode(this.shell.currentWidget);
}
}