mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 13:46:13 +00:00
parent
01630824e8
commit
994e64fac1
|
@ -450,6 +450,16 @@ export class ExplorerView extends ViewPane {
|
|||
}
|
||||
}));
|
||||
|
||||
this._register(this.tree.onDidChangeCollapseState(e => {
|
||||
const element = e.node.element?.element;
|
||||
if (element) {
|
||||
const navigationController = this.renderer.getCompressedNavigationController(element instanceof Array ? element[0] : element);
|
||||
if (navigationController) {
|
||||
navigationController.updateCollapsed(e.node.collapsed);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
// save view state
|
||||
this._register(this.storageService.onWillSaveState(() => {
|
||||
this.storageService.store(ExplorerView.TREE_VIEW_STATE_STORAGE_KEY, JSON.stringify(this.tree.getViewState()), StorageScope.WORKSPACE);
|
||||
|
|
|
@ -134,6 +134,7 @@ export interface ICompressedNavigationController {
|
|||
first(): void;
|
||||
last(): void;
|
||||
setIndex(index: number): void;
|
||||
updateCollapsed(collapsed: boolean): void;
|
||||
}
|
||||
|
||||
export class CompressedNavigationController implements ICompressedNavigationController, IDisposable {
|
||||
|
@ -153,7 +154,7 @@ export class CompressedNavigationController implements ICompressedNavigationCont
|
|||
private _onDidChange = new Emitter<void>();
|
||||
readonly onDidChange = this._onDidChange.event;
|
||||
|
||||
constructor(private id: string, readonly items: ExplorerItem[], templateData: IFileTemplateData) {
|
||||
constructor(private id: string, readonly items: ExplorerItem[], templateData: IFileTemplateData, private depth: number, private collapsed: boolean) {
|
||||
this._index = items.length - 1;
|
||||
|
||||
this.updateLabels(templateData);
|
||||
|
@ -165,7 +166,9 @@ export class CompressedNavigationController implements ICompressedNavigationCont
|
|||
|
||||
for (let i = 0; i < this.labels.length; i++) {
|
||||
this.labels[i].setAttribute('aria-label', this.items[i].name);
|
||||
this.labels[i].setAttribute('aria-level', `${this.depth + i}`);
|
||||
}
|
||||
this.updateCollapsed(this.collapsed);
|
||||
|
||||
if (this._index < this.labels.length) {
|
||||
DOM.addClass(this.labels[this._index], 'active');
|
||||
|
@ -216,6 +219,13 @@ export class CompressedNavigationController implements ICompressedNavigationCont
|
|||
this._onDidChange.fire();
|
||||
}
|
||||
|
||||
updateCollapsed(collapsed: boolean): void {
|
||||
this.collapsed = collapsed;
|
||||
for (let i = 0; i < this.labels.length; i++) {
|
||||
this.labels[i].setAttribute('aria-expanded', collapsed ? 'false' : 'true');
|
||||
}
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
this._onDidChange.dispose();
|
||||
this._updateLabelDisposable.dispose();
|
||||
|
@ -308,7 +318,7 @@ export class FilesRenderer implements ICompressibleTreeRenderer<ExplorerItem, Fu
|
|||
const label = node.element.elements.map(e => e.name);
|
||||
disposables.add(this.renderStat(stat, label, id, node.filterData, templateData));
|
||||
|
||||
const compressedNavigationController = new CompressedNavigationController(id, node.element.elements, templateData);
|
||||
const compressedNavigationController = new CompressedNavigationController(id, node.element.elements, templateData, node.depth, node.collapsed);
|
||||
disposables.add(compressedNavigationController);
|
||||
this.compressedNavigationControllers.set(stat, compressedNavigationController);
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ suite('Files - ExplorerView', () => {
|
|||
container: label,
|
||||
onDidRender: emitter.event
|
||||
}
|
||||
});
|
||||
}, 1, false);
|
||||
|
||||
assert.equal(navigationController.count, 3);
|
||||
assert.equal(navigationController.index, 2);
|
||||
|
|
Loading…
Reference in a new issue