提交 33475542 编写于 作者: B Benjamin Pasero

labels - adopt for markers panel

上级 2d892bd5
......@@ -28,7 +28,21 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
export interface IResourceLabelHandle extends IDisposable {
readonly element: HTMLElement;
/**
* Most basic method to apply a label.
*/
setLabel(label: IResourceLabel, options?: IResourceLabelOptions): void;
/**
* Convinient method to apply a label by passing an editor along.
*/
setEditor(editor: IEditorInput, options?: IResourceLabelOptions): void;
/**
* Convinient method to render a file label based on a resource.
*/
setFile(resource: uri, options?: IFileLabelOptions): void;
clear(): void;
onClick(callback: (event: MouseEvent) => void): IDisposable;
......@@ -88,6 +102,8 @@ export class ResourceLabels extends Disposable {
const label: IResourceLabelHandle = {
element: widget.element,
setLabel: (label: IResourceLabel, options?: IResourceLabelOptions) => widget.setLabel(label, options),
setEditor: (editor: IEditorInput, options?: IResourceLabelOptions) => widget.setEditor(editor, options),
setFile: (resource: uri, options?: IFileLabelOptions) => widget.setFile(resource, options),
clear: () => widget.clear(),
onClick: (callback: (event: MouseEvent) => void) => widget.onClick(callback),
dispose: () => this.disposeWidget(widget)
......@@ -163,8 +179,10 @@ class ResourceLabelWidget extends IconLabel {
options: IIconLabelCreationOptions,
@IModeService private modeService: IModeService,
@IModelService private modelService: IModelService,
@IDecorationsService protected decorationsService: IDecorationsService,
@ILabelService protected labelService: ILabelService
@IDecorationsService private decorationsService: IDecorationsService,
@ILabelService private labelService: ILabelService,
@IUntitledEditorService private untitledEditorService: IUntitledEditorService,
@IWorkspaceContextService private contextService: IWorkspaceContextService
) {
super(container, options);
}
......@@ -250,6 +268,39 @@ class ResourceLabelWidget extends IconLabel {
return true;
}
setEditor(editor: IEditorInput, options?: IResourceLabelOptions): void {
this.setLabel({
resource: toResource(editor, { supportSideBySide: true }),
name: editor.getName(),
description: editor.getDescription()
}, options);
}
setFile(resource: uri, options?: IFileLabelOptions): void {
const hideLabel = options && options.hideLabel;
let name: string;
if (!hideLabel) {
if (options && options.fileKind === FileKind.ROOT_FOLDER) {
const workspaceFolder = this.contextService.getWorkspaceFolder(resource);
if (workspaceFolder) {
name = workspaceFolder.name;
}
}
if (!name) {
name = resources.basenameOrAuthority(resource);
}
}
let description: string;
const hidePath = (options && options.hidePath) || (resource.scheme === Schemas.untitled && !this.untitledEditorService.hasAssociatedFilePath(resource));
if (!hidePath) {
description = this.labelService.getUriLabel(resources.dirname(resource), { relative: true });
}
this.setLabel({ resource, name, description }, options);
}
clear(): void {
this.label = void 0;
this.options = void 0;
......
......@@ -33,7 +33,7 @@ import { IExpression, getEmptyExpression } from 'vs/base/common/glob';
import { mixin, deepClone } from 'vs/base/common/objects';
import { IWorkspaceFolder, IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { isAbsolute, join } from 'vs/base/common/paths';
import { FilterData, FileResourceMarkersRenderer, Filter, VirtualDelegate, ResourceMarkersRenderer, MarkerRenderer, RelatedInformationRenderer, TreeElement, MarkersTreeAccessibilityProvider, MarkersViewState } from 'vs/workbench/parts/markers/electron-browser/markersTreeViewer';
import { FilterData, Filter, VirtualDelegate, ResourceMarkersRenderer, MarkerRenderer, RelatedInformationRenderer, TreeElement, MarkersTreeAccessibilityProvider, MarkersViewState } from 'vs/workbench/parts/markers/electron-browser/markersTreeViewer';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { Separator, ActionItem } from 'vs/base/browser/ui/actionbar/actionbar';
import { IMenuService, MenuId } from 'vs/platform/actions/common/actions';
......@@ -42,6 +42,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { domEvent } from 'vs/base/browser/event';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { ResourceLabels } from 'vs/workbench/browser/labels';
function createModelIterator(model: MarkersModel): Iterator<ITreeElement<TreeElement>> {
const resourcesIt = Iterator.fromArray(model.resourceMarkers);
......@@ -287,10 +288,11 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
const onDidChangeRenderNodeCount = new Relay<ITreeNode<any, any>>();
const labels = this._register(this.instantiationService.createInstance(ResourceLabels));
const virtualDelegate = new VirtualDelegate(this.markersViewState);
const renderers = [
this.instantiationService.createInstance(FileResourceMarkersRenderer, onDidChangeRenderNodeCount.event),
this.instantiationService.createInstance(ResourceMarkersRenderer, onDidChangeRenderNodeCount.event),
this.instantiationService.createInstance(ResourceMarkersRenderer, labels, onDidChangeRenderNodeCount.event),
this.instantiationService.createInstance(MarkerRenderer, this.markersViewState, a => this.getActionItem(a)),
this.instantiationService.createInstance(RelatedInformationRenderer)
];
......
......@@ -7,7 +7,7 @@ import * as dom from 'vs/base/browser/dom';
import * as network from 'vs/base/common/network';
import * as paths from 'vs/base/common/paths';
import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge';
import { FileLabel, ResourceLabel } from 'vs/workbench/browser/labels';
import { ResourceLabels, IResourceLabelHandle } from 'vs/workbench/browser/labels';
import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';
import { IMarker, MarkerSeverity } from 'vs/platform/markers/common/markers';
import { ResourceMarkers, Marker, RelatedInformation } from 'vs/workbench/parts/markers/electron-browser/markersModel';
......@@ -34,7 +34,7 @@ import { localize } from 'vs/nls';
export type TreeElement = ResourceMarkers | Marker | RelatedInformation;
interface IResourceMarkersTemplateData {
resourceLabel: ResourceLabel;
resourceLabel: IResourceLabelHandle;
count: CountBadge;
styler: IDisposable;
}
......@@ -69,7 +69,6 @@ export class MarkersTreeAccessibilityProvider implements IAccessibilityProvider<
}
const enum TemplateId {
FileResourceMarkers = 'frm',
ResourceMarkers = 'rm',
Marker = 'm',
RelatedInformation = 'ri'
......@@ -90,11 +89,7 @@ export class VirtualDelegate implements IListVirtualDelegate<TreeElement> {
getTemplateId(element: TreeElement): string {
if (element instanceof ResourceMarkers) {
if ((element).resource.scheme === network.Schemas.file || (<ResourceMarkers>element).resource.scheme === network.Schemas.untitled) {
return TemplateId.FileResourceMarkers;
} else {
return TemplateId.ResourceMarkers;
}
return TemplateId.ResourceMarkers;
} else if (element instanceof Marker) {
return TemplateId.Marker;
} else {
......@@ -135,6 +130,7 @@ export class ResourceMarkersRenderer implements ITreeRenderer<ResourceMarkers, R
private disposables: IDisposable[] = [];
constructor(
protected labels: ResourceLabels,
onDidChangeRenderNodeCount: Event<ITreeNode<ResourceMarkers, ResourceMarkersFilterData>>,
@IInstantiationService protected instantiationService: IInstantiationService,
@IThemeService private themeService: IThemeService,
......@@ -149,7 +145,7 @@ export class ResourceMarkersRenderer implements ITreeRenderer<ResourceMarkers, R
const data = <IResourceMarkersTemplateData>Object.create(null);
const resourceLabelContainer = dom.append(container, dom.$('.resource-label-container'));
data.resourceLabel = this.createResourceLabel(resourceLabelContainer);
data.resourceLabel = this.labels.create(resourceLabelContainer, { supportHighlights: true });
const badgeWrapper = dom.append(container, dom.$('.count-badge-wrapper'));
data.count = new CountBadge(badgeWrapper);
......@@ -162,7 +158,7 @@ export class ResourceMarkersRenderer implements ITreeRenderer<ResourceMarkers, R
const resourceMarkers = node.element;
const uriMatches = node.filterData && node.filterData.uriMatches || [];
if (templateData.resourceLabel instanceof FileLabel) {
if (resourceMarkers.resource.scheme === network.Schemas.file || resourceMarkers.resource.scheme === network.Schemas.untitled) {
templateData.resourceLabel.setFile(resourceMarkers.resource, { matches: uriMatches });
} else {
templateData.resourceLabel.setLabel({ name: resourceMarkers.name, description: this.labelService.getUriLabel(dirname(resourceMarkers.resource), { relative: true }), resource: resourceMarkers.resource }, { matches: uriMatches });
......@@ -181,10 +177,6 @@ export class ResourceMarkersRenderer implements ITreeRenderer<ResourceMarkers, R
templateData.styler.dispose();
}
protected createResourceLabel(container: HTMLElement): ResourceLabel {
return this.instantiationService.createInstance(ResourceLabel, container, { supportHighlights: true });
}
private onDidChangeRenderNodeCount(node: ITreeNode<ResourceMarkers, ResourceMarkersFilterData>): void {
const templateData = this.renderedNodes.get(node);
......@@ -205,12 +197,6 @@ export class ResourceMarkersRenderer implements ITreeRenderer<ResourceMarkers, R
}
export class FileResourceMarkersRenderer extends ResourceMarkersRenderer {
templateId = TemplateId.FileResourceMarkers;
protected createResourceLabel(container: HTMLElement): ResourceLabel {
return this.instantiationService.createInstance(FileLabel, container, { supportHighlights: true });
}
}
export class MarkerRenderer implements ITreeRenderer<Marker, MarkerFilterData, IMarkerTemplateData> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册