From 41d8948632e6afc8e5b9372899fed3f085bc1808 Mon Sep 17 00:00:00 2001 From: isidor Date: Mon, 6 Apr 2020 16:13:23 +0200 Subject: [PATCH] breakpoitnsView: accessibilityProvider for list #92342 --- .../contrib/debug/browser/breakpointsView.ts | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/breakpointsView.ts b/src/vs/workbench/contrib/debug/browser/breakpointsView.ts index 1252201533e..afb4aa34477 100644 --- a/src/vs/workbench/contrib/debug/browser/breakpointsView.ts +++ b/src/vs/workbench/contrib/debug/browser/breakpointsView.ts @@ -37,6 +37,7 @@ import { TextEditorSelectionRevealType } from 'vs/platform/editor/common/editor' import { IOpenerService } from 'vs/platform/opener/common/opener'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { Orientation } from 'vs/base/browser/ui/splitview/splitview'; +import { IAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; const $ = dom.$; @@ -54,10 +55,11 @@ export function getExpandedBodySize(model: IDebugModel): number { const length = model.getBreakpoints().length + model.getExceptionBreakpoints().length + model.getFunctionBreakpoints().length + model.getDataBreakpoints().length; return Math.min(MAX_VISIBLE_BREAKPOINTS, length) * 22; } +type BreakpointItem = IBreakpoint | IFunctionBreakpoint | IDataBreakpoint | IExceptionBreakpoint; export class BreakpointsView extends ViewPane { - private list!: WorkbenchList; + private list!: WorkbenchList; private needsRefresh = false; constructor( @@ -88,7 +90,7 @@ export class BreakpointsView extends ViewPane { dom.addClass(container, 'debug-breakpoints'); const delegate = new BreakpointsDelegate(this.debugService); - this.list = >this.instantiationService.createInstance(WorkbenchList, 'Breakpoints', container, delegate, [ + this.list = >this.instantiationService.createInstance(WorkbenchList, 'Breakpoints', container, delegate, [ this.instantiationService.createInstance(BreakpointsRenderer), new ExceptionBreakpointsRenderer(this.debugService), this.instantiationService.createInstance(FunctionBreakpointsRenderer), @@ -104,6 +106,7 @@ export class BreakpointsView extends ViewPane { getRole: (breakpoint: IEnablement) => 'checkbox', isChecked: (breakpoint: IEnablement) => breakpoint.enabled }, + accessibilityProvider: new BreakpointsAccessibilityProvider(this.debugService), overrideStyles: { listBackground: this.getBackgroundColor() } @@ -246,25 +249,25 @@ export class BreakpointsView extends ViewPane { } } - private get elements(): IEnablement[] { + private get elements(): BreakpointItem[] { const model = this.debugService.getModel(); const elements = (>model.getExceptionBreakpoints()).concat(model.getFunctionBreakpoints()).concat(model.getDataBreakpoints()).concat(model.getBreakpoints()); - return elements; + return elements as BreakpointItem[]; } } -class BreakpointsDelegate implements IListVirtualDelegate { +class BreakpointsDelegate implements IListVirtualDelegate { constructor(private debugService: IDebugService) { // noop } - getHeight(element: IEnablement): number { + getHeight(_element: BreakpointItem): number { return 22; } - getTemplateId(element: IEnablement): string { + getTemplateId(element: BreakpointItem): string { if (element instanceof Breakpoint) { return BreakpointsRenderer.ID; } @@ -291,7 +294,7 @@ interface IBaseBreakpointTemplateData { breakpoint: HTMLElement; name: HTMLElement; checkbox: HTMLInputElement; - context: IEnablement; + context: BreakpointItem; toDispose: IDisposable[]; } @@ -621,6 +624,22 @@ class FunctionBreakpointInputRenderer implements IListRenderer { + + constructor(private readonly debugService: IDebugService) { } + + getAriaLabel(element: BreakpointItem): string | null { + if (element instanceof ExceptionBreakpoint) { + return element.toString(); + } + + const { message } = getBreakpointMessageAndClassName(this.debugService.state, this.debugService.getModel().areBreakpointsActivated(), element as IBreakpoint | IDataBreakpoint | IFunctionBreakpoint); + const toString = element.toString(); + + return message ? `${toString} ${message}` : toString; + } +} + export function openBreakpointSource(breakpoint: IBreakpoint, sideBySide: boolean, preserveFocus: boolean, debugService: IDebugService, editorService: IEditorService): Promise { if (breakpoint.uri.scheme === DEBUG_SCHEME && debugService.state === State.Inactive) { return Promise.resolve(undefined); -- GitLab