提交 f68c9b04 编写于 作者: A Alex Ross

Add a 'Forward a Port' command to the command palette

上级 cfed333e
...@@ -17,7 +17,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView ...@@ -17,7 +17,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { FilterViewPaneContainer } from 'vs/workbench/browser/parts/views/viewsViewlet'; import { FilterViewPaneContainer } from 'vs/workbench/browser/parts/views/viewsViewlet';
import { VIEWLET_ID, VIEW_CONTAINER } from 'vs/workbench/contrib/remote/common/remote.contribution'; import { VIEWLET_ID, VIEW_CONTAINER } from 'vs/workbench/contrib/remote/common/remote.contribution';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IViewDescriptor, IViewsRegistry, Extensions } from 'vs/workbench/common/views'; import { IViewDescriptor, IViewsRegistry, Extensions } from 'vs/workbench/common/views';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
...@@ -288,10 +288,11 @@ export class RemoteViewlet extends Viewlet { ...@@ -288,10 +288,11 @@ export class RemoteViewlet extends Viewlet {
} }
} }
export const forwardedPortsViewEnabled = new RawContextKey<boolean>('forwardedPortsViewEnabled', false);
export class RemoteViewPaneContainer extends FilterViewPaneContainer { export class RemoteViewPaneContainer extends FilterViewPaneContainer {
private actions: IAction[] | undefined; private actions: IAction[] | undefined;
private tunnelPanelDescriptor: TunnelPanelDescriptor | undefined; private tunnelPanelDescriptor: TunnelPanelDescriptor | undefined;
private static contextKeyName: string = 'forwardedPortsViewEnabled';
constructor( constructor(
@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
...@@ -308,7 +309,6 @@ export class RemoteViewPaneContainer extends FilterViewPaneContainer { ...@@ -308,7 +309,6 @@ export class RemoteViewPaneContainer extends FilterViewPaneContainer {
@IContextKeyService private readonly contextKeyService: IContextKeyService @IContextKeyService private readonly contextKeyService: IContextKeyService
) { ) {
super(VIEWLET_ID, remoteExplorerService.onDidChangeTargetType, configurationService, layoutService, telemetryService, storageService, instantiationService, themeService, contextMenuService, extensionService, contextService); super(VIEWLET_ID, remoteExplorerService.onDidChangeTargetType, configurationService, layoutService, telemetryService, storageService, instantiationService, themeService, contextMenuService, extensionService, contextService);
this.contextKeyService.createKey(RemoteViewPaneContainer.contextKeyName, false);
} }
protected getFilterOn(viewDescriptor: IViewDescriptor): string | undefined { protected getFilterOn(viewDescriptor: IViewDescriptor): string | undefined {
...@@ -345,7 +345,7 @@ export class RemoteViewPaneContainer extends FilterViewPaneContainer { ...@@ -345,7 +345,7 @@ export class RemoteViewPaneContainer extends FilterViewPaneContainer {
// Call to super MUST be first, since registering the additional view will cause this to be called again. // Call to super MUST be first, since registering the additional view will cause this to be called again.
const panels: ViewPane[] = super.onDidAddViews(added); const panels: ViewPane[] = super.onDidAddViews(added);
// This context key is set to false in the constructor, but is expected to be changed by resolver extensions to enable the forwarded ports view. // This context key is set to false in the constructor, but is expected to be changed by resolver extensions to enable the forwarded ports view.
const viewEnabled: boolean = !!this.contextKeyService.getContextKeyValue<boolean>(RemoteViewPaneContainer.contextKeyName); const viewEnabled: boolean = !!forwardedPortsViewEnabled.getValue(this.contextKeyService);
if (this.environmentService.configuration.remoteAuthority && !this.tunnelPanelDescriptor && viewEnabled) { if (this.environmentService.configuration.remoteAuthority && !this.tunnelPanelDescriptor && viewEnabled) {
this.tunnelPanelDescriptor = new TunnelPanelDescriptor(new TunnelViewModel(this.remoteExplorerService), this.environmentService); this.tunnelPanelDescriptor = new TunnelPanelDescriptor(new TunnelViewModel(this.remoteExplorerService), this.environmentService);
const viewsRegistry = Registry.as<IViewsRegistry>(Extensions.ViewsRegistry); const viewsRegistry = Registry.as<IViewsRegistry>(Extensions.ViewsRegistry);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
import 'vs/css!./media/tunnelView'; import 'vs/css!./media/tunnelView';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import * as dom from 'vs/base/browser/dom'; import * as dom from 'vs/base/browser/dom';
import { IViewDescriptor, IEditableData } from 'vs/workbench/common/views'; import { IViewDescriptor, IEditableData, IViewsService } from 'vs/workbench/common/views';
import { WorkbenchAsyncDataTree, TreeResourceNavigator2 } from 'vs/platform/list/browser/listService'; import { WorkbenchAsyncDataTree, TreeResourceNavigator2 } from 'vs/platform/list/browser/listService';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
...@@ -37,6 +37,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; ...@@ -37,6 +37,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPaneContainer'; import { ViewPane, IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPaneContainer';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { forwardedPortsViewEnabled } from 'vs/workbench/contrib/remote/browser/remote';
class TunnelTreeVirtualDelegate implements IListVirtualDelegate<ITunnelItem> { class TunnelTreeVirtualDelegate implements IListVirtualDelegate<ITunnelItem> {
getHeight(element: ITunnelItem): number { getHeight(element: ITunnelItem): number {
...@@ -95,7 +96,7 @@ export class TunnelViewModel extends Disposable implements ITunnelViewModel { ...@@ -95,7 +96,7 @@ export class TunnelViewModel extends Disposable implements ITunnelViewModel {
}); });
} }
groups.push({ groups.push({
label: nls.localize('remote.tunnelsView.add', "Forward Port..."), label: nls.localize('remote.tunnelsView.add', "Forward a Port..."),
tunnelType: TunnelType.Add, tunnelType: TunnelType.Add,
}); });
return groups; return groups;
...@@ -592,7 +593,7 @@ namespace LabelTunnelAction { ...@@ -592,7 +593,7 @@ namespace LabelTunnelAction {
namespace ForwardPortAction { namespace ForwardPortAction {
export const ID = 'remote.tunnel.forward'; export const ID = 'remote.tunnel.forward';
export const LABEL = nls.localize('remote.tunnel.forward', "Forward Port"); export const LABEL = nls.localize('remote.tunnel.forward', "Forward a Port");
export function handler(): ICommandHandler { export function handler(): ICommandHandler {
return async (accessor, arg) => { return async (accessor, arg) => {
...@@ -600,6 +601,8 @@ namespace ForwardPortAction { ...@@ -600,6 +601,8 @@ namespace ForwardPortAction {
if (arg instanceof TunnelItem) { if (arg instanceof TunnelItem) {
remoteExplorerService.tunnelModel.forward(arg.remote); remoteExplorerService.tunnelModel.forward(arg.remote);
} else { } else {
const viewsService = accessor.get(IViewsService);
viewsService.openView(TunnelPanel.ID, true);
remoteExplorerService.setEditable(undefined, { remoteExplorerService.setEditable(undefined, {
onFinish: (value, success) => { onFinish: (value, success) => {
if (success) { if (success) {
...@@ -679,6 +682,15 @@ CommandsRegistry.registerCommand(ClosePortAction.ID, ClosePortAction.handler()); ...@@ -679,6 +682,15 @@ CommandsRegistry.registerCommand(ClosePortAction.ID, ClosePortAction.handler());
CommandsRegistry.registerCommand(OpenPortInBrowserAction.ID, OpenPortInBrowserAction.handler()); CommandsRegistry.registerCommand(OpenPortInBrowserAction.ID, OpenPortInBrowserAction.handler());
CommandsRegistry.registerCommand(CopyAddressAction.ID, CopyAddressAction.handler()); CommandsRegistry.registerCommand(CopyAddressAction.ID, CopyAddressAction.handler());
MenuRegistry.appendMenuItem(MenuId.CommandPalette, ({
command: {
id: ForwardPortAction.ID,
title: ForwardPortAction.LABEL
},
when: forwardedPortsViewEnabled
}));
MenuRegistry.appendMenuItem(MenuId.TunnelTitle, ({ MenuRegistry.appendMenuItem(MenuId.TunnelTitle, ({
group: 'navigation', group: 'navigation',
order: 0, order: 0,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册