This commit is contained in:
Aaron Munger 2023-11-06 15:30:40 -08:00 committed by Aaron Munger
parent 36d4b03b9f
commit 58c2ebe5f8
2 changed files with 58 additions and 0 deletions

View file

@ -19,6 +19,9 @@ import { IViewDescriptorService } from 'vs/workbench/common/views';
export class VariablesPanel extends ViewPane {
static readonly ID = TUNNEL_VIEW_ID;
static readonly TITLE: ILocalizedString = nls.localize2('remote.tunnel', "Ports");
constructor(
options: IViewPaneOptions,
@IKeybindingService keybindingService: IKeybindingService,
@ -38,3 +41,23 @@ export class VariablesPanel extends ViewPane {
}
}
export class TunnelPanelDescriptor implements IViewDescriptor {
readonly id = TunnelPanel.ID;
readonly name: ILocalizedString = TunnelPanel.TITLE;
readonly ctorDescriptor: SyncDescriptor<TunnelPanel>;
readonly canToggleVisibility = true;
readonly hideByDefault = false;
// group is not actually used for views that are not extension contributed. Use order instead.
readonly group = 'details@0';
// -500 comes from the remote explorer viewOrderDelegate
readonly order = -500;
readonly remoteAuthority?: string | string[];
readonly canMoveView = true;
readonly containerIcon = portsViewIcon;
constructor(viewModel: ITunnelViewModel, environmentService: IWorkbenchEnvironmentService) {
this.ctorDescriptor = new SyncDescriptor(TunnelPanel, [viewModel]);
this.remoteAuthority = environmentService.remoteAuthority ? environmentService.remoteAuthority.split('+')[0] : undefined;
}
}

View file

@ -3,8 +3,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
import { Disposable } from 'vs/base/common/lifecycle';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { Registry } from 'vs/platform/registry/common/platform';
import { Extensions, IViewContainersRegistry, IViewsRegistry } from 'vs/workbench/common/views';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
const VARIABLES_VIEW_CONTAINER_ID = 'variablesViewContainer';
@ -12,6 +16,37 @@ export class VariablesView extends Disposable implements IWorkbenchContribution
constructor() {
super();
this.enableVariablesView();
}
private async enableVariablesView() {
const viewEnabled = true;
if (viewEnabled) {
const viewContainer = await this.getViewContainer();
const variablesPanelDescriptor = new VariablesPanelDescriptor();
const viewsRegistry = Registry.as<IViewsRegistry>(Extensions.ViewsRegistry);
if (viewContainer) {
viewsRegistry.registerViews([variablesPanelDescriptor!], viewContainer);
}
} else {
this.contextKeyListener = this.contextKeyService.onDidChangeContext(e => {
if (e.affectsSome(new Set(forwardedPortsViewEnabled.keys()))) {
this.enableForwardedPortsView();
}
});
}
}
getViewContainer() {
return Registry.as<IViewContainersRegistry>(Extensions.ViewContainersRegistry).registerViewContainer({
id: VARIABLES_VIEW_CONTAINER_ID,
title: { value: nls.localize('variables', "Kernel Variables"), original: 'Kernel Variables' },
ctorDescriptor: new SyncDescriptor(ViewPaneContainer, [VARIABLES_VIEW_CONTAINER_ID, { mergeViewWithContainerWhenSingleView: true }]),
storageId: VARIABLES_VIEW_CONTAINER_ID,
hideIfEmpty: true,
order: 5
}, ViewContainerLocation.Panel);
}
}