Skip to content

Commit

Permalink
Add drop down to quick diff (microsoft#174353)
Browse files Browse the repository at this point in the history
* Add dropdown to quick diff when multiple providers
Fixes microsoft#169012

* Fix git revert action in quick diff
Fixes microsoft#172432

* Make dropdown drive entire quick diff peek
- "x of y" detail
- action bar

* Handle providers being removed

* Delete unused css

* Address PR feedback
  • Loading branch information
alexr00 authored and c-claeys committed Feb 16, 2023
1 parent 2a51416 commit 3063e93
Show file tree
Hide file tree
Showing 7 changed files with 256 additions and 77 deletions.
4 changes: 2 additions & 2 deletions src/vs/base/browser/ui/actionbar/actionViewItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ export class ActionViewItem extends BaseActionViewItem {
}
}

export class SelectActionViewItem extends BaseActionViewItem {
export class SelectActionViewItem<T = string> extends BaseActionViewItem {
protected selectBox: SelectBox;

constructor(ctx: unknown, action: IAction, options: ISelectOptionItem[], selected: number, contextViewProvider: IContextViewProvider, styles: ISelectBoxStyles, selectBoxOptions?: ISelectBoxOptions) {
Expand Down Expand Up @@ -444,7 +444,7 @@ export class SelectActionViewItem extends BaseActionViewItem {
this.actionRunner.run(this._action, this.getActionContext(option, index));
}

protected getActionContext(option: string, index: number) {
protected getActionContext(option: string, index: number): T | string {
return option;
}

Expand Down
13 changes: 7 additions & 6 deletions src/vs/editor/contrib/peekView/browser/peekView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ export abstract class PeekViewWidget extends ZoneWidget {
private disposed?: true;

protected _headElement?: HTMLDivElement;
protected _titleElement?: HTMLDivElement;
protected _primaryHeading?: HTMLElement;
protected _secondaryHeading?: HTMLElement;
protected _metaHeading?: HTMLElement;
Expand Down Expand Up @@ -180,18 +181,18 @@ export abstract class PeekViewWidget extends ZoneWidget {
}

protected _fillHead(container: HTMLElement, noCloseAction?: boolean): void {
const titleElement = dom.$('.peekview-title');
this._titleElement = dom.$('.peekview-title');
if ((this.options as IPeekViewOptions).supportOnTitleClick) {
titleElement.classList.add('clickable');
dom.addStandardDisposableListener(titleElement, 'click', event => this._onTitleClick(event));
this._titleElement.classList.add('clickable');
dom.addStandardDisposableListener(this._titleElement, 'click', event => this._onTitleClick(event));
}
dom.append(this._headElement!, titleElement);
dom.append(this._headElement!, this._titleElement);

this._fillTitleIcon(titleElement);
this._fillTitleIcon(this._titleElement);
this._primaryHeading = dom.$('span.filename');
this._secondaryHeading = dom.$('span.dirname');
this._metaHeading = dom.$('span.meta');
dom.append(titleElement, this._primaryHeading, this._secondaryHeading, this._metaHeading);
dom.append(this._titleElement, this._primaryHeading, this._secondaryHeading, this._metaHeading);

const actionsContainer = dom.$('.peekview-actions');
dom.append(this._headElement!, actionsContainer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ export class StartDebugActionViewItem extends BaseActionViewItem {
}
}

export class FocusSessionActionViewItem extends SelectActionViewItem {
export class FocusSessionActionViewItem extends SelectActionViewItem<IDebugSession> {
constructor(
action: IAction,
session: IDebugSession | undefined,
Expand Down Expand Up @@ -286,7 +286,7 @@ export class FocusSessionActionViewItem extends SelectActionViewItem {
this.update(selectedSession);
}

protected override getActionContext(_: string, index: number): any {
protected override getActionContext(_: string, index: number): IDebugSession {
return this.getSessions()[index];
}

Expand Down
4 changes: 2 additions & 2 deletions src/vs/workbench/contrib/remote/browser/explorerViewItems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ interface IRemoteSelectItem extends ISelectOptionItem {
virtualWorkspace?: string;
}

export class SwitchRemoteViewItem extends SelectActionViewItem {
export class SwitchRemoteViewItem extends SelectActionViewItem<IRemoteSelectItem> {

constructor(
action: IAction,
Expand Down Expand Up @@ -92,7 +92,7 @@ export class SwitchRemoteViewItem extends SelectActionViewItem {
}
}

protected override getActionContext(_: string, index: number): any {
protected override getActionContext(_: string, index: number): IRemoteSelectItem {
return this.optionsItems[index];
}

Expand Down
64 changes: 64 additions & 0 deletions src/vs/workbench/contrib/scm/browser/dirtyDiffSwitcher.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import * as nls from 'vs/nls';
import { Action, IAction } from 'vs/base/common/actions';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox';
import { SelectActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems';
import { defaultSelectBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { peekViewTitleBackground } from 'vs/editor/contrib/peekView/browser/peekView';
import { Color } from 'vs/base/common/color';

export interface IQuickDiffSelectItem extends ISelectOptionItem {
provider: string;
}

export class SwitchQuickDiffViewItem extends SelectActionViewItem<IQuickDiffSelectItem> {
private readonly optionsItems: IQuickDiffSelectItem[];

constructor(
action: IAction,
providers: string[],
selected: string,
@IContextViewService contextViewService: IContextViewService,
@IThemeService themeService: IThemeService
) {
const items = providers.map(provider => ({ provider, text: provider }));
let startingSelection = providers.indexOf(selected);
if (startingSelection === -1) {
startingSelection = 0;
}
const styles = { ...defaultSelectBoxStyles };
const theme = themeService.getColorTheme();
styles.selectBackground = theme.getColor(peekViewTitleBackground)?.lighten(.7).toString() || Color.transparent.toString();
super(null, action, items, startingSelection, contextViewService, styles, { ariaLabel: nls.localize('remotes', 'Switch quick diff base') });
this.optionsItems = items;
}

public setSelection(provider: string) {
const index = this.optionsItems.findIndex(item => item.provider === provider);
this.select(index);
}

protected override getActionContext(_: string, index: number): IQuickDiffSelectItem {
return this.optionsItems[index];
}
}

export class SwitchQuickDiffBaseAction extends Action {

public static readonly ID = 'quickDiff.base.switch';
public static readonly LABEL = nls.localize('quickDiff.base.switch', "Switch Quick Diff Base");

constructor(private readonly callback: (event?: IQuickDiffSelectItem) => void) {
super(SwitchQuickDiffBaseAction.ID, SwitchQuickDiffBaseAction.LABEL, undefined, undefined);
}

override async run(event?: IQuickDiffSelectItem): Promise<void> {
return this.callback(event);
}
}
Loading

0 comments on commit 3063e93

Please sign in to comment.