From 15b00390b91dc84a497a9d9c3f53f7a527a7daa0 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 18 Jul 2018 08:48:11 +0200 Subject: [PATCH] breadcrumbs - selecting a folder opens next picker --- .../ui/breadcrumbs/breadcrumbsWidget.ts | 4 ++ .../parts/editor/breadcrumbsControl.ts | 46 ++++++++++--------- .../browser/parts/editor/breadcrumbsPicker.ts | 2 +- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts b/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts index 222325edf6f..e78bc4bb97a 100644 --- a/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts +++ b/src/vs/base/browser/ui/breadcrumbs/breadcrumbsWidget.ts @@ -232,6 +232,10 @@ export class BreadcrumbsWidget { this._onDidSelectItem.fire({ type: 'select', item: this._items[this._selectedItemIdx], node: this._nodes[this._selectedItemIdx], payload }); } + getItems(): ReadonlyArray { + return this._items; + } + setItems(items: BreadcrumbsItem[]): void { let prefix = commonPrefixLength(this._items, items, (a, b) => a.equals(b)); let removed = this._items.splice(prefix, this._items.length - prefix, ...items.slice(prefix)); diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts index 69bca420c8a..0b0477e69f0 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts @@ -6,36 +6,35 @@ 'use strict'; import * as dom from 'vs/base/browser/dom'; +import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { BreadcrumbsItem, BreadcrumbsWidget, IBreadcrumbsItemEvent } from 'vs/base/browser/ui/breadcrumbs/breadcrumbsWidget'; import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { dispose, IDisposable, combinedDisposable } from 'vs/base/common/lifecycle'; -import { isEqual, basenameOrAuthority } from 'vs/base/common/resources'; -import URI from 'vs/base/common/uri'; +import { combinedDisposable, dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { Schemas } from 'vs/base/common/network'; +import { basenameOrAuthority, isEqual } from 'vs/base/common/resources'; import 'vs/css!./media/breadcrumbscontrol'; import { ICodeEditor, isCodeEditor } from 'vs/editor/browser/editorBrowser'; import { Range } from 'vs/editor/common/core/range'; +import { symbolKindToCssClass } from 'vs/editor/common/modes'; import { OutlineElement, OutlineGroup, OutlineModel, TreeElement } from 'vs/editor/contrib/documentSymbols/outlineModel'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { FileKind, IFileService } from 'vs/platform/files/common/files'; import { IConstructorSignature1, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen'; import { attachBreadcrumbsStyler } from 'vs/platform/theme/common/styler'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { FileLabel } from 'vs/workbench/browser/labels'; +import { BreadcrumbsConfig, IBreadcrumbsService } from 'vs/workbench/browser/parts/editor/breadcrumbs'; import { BreadcrumbElement, EditorBreadcrumbsModel, FileElement } from 'vs/workbench/browser/parts/editor/breadcrumbsModel'; +import { BreadcrumbsFilePicker, BreadcrumbsOutlinePicker, BreadcrumbsPicker } from 'vs/workbench/browser/parts/editor/breadcrumbsPicker'; import { EditorGroupView } from 'vs/workbench/browser/parts/editor/editorGroupView'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; -import { IBreadcrumbsService, BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs'; -import { symbolKindToCssClass } from 'vs/editor/common/modes'; -import { BreadcrumbsPicker, BreadcrumbsFilePicker, BreadcrumbsOutlinePicker } from 'vs/workbench/browser/parts/editor/breadcrumbsPicker'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen'; -import { Schemas } from 'vs/base/common/network'; class Item extends BreadcrumbsItem { @@ -245,7 +244,7 @@ export class BreadcrumbsControl { // reveal the item this._widget.setFocused(undefined); this._widget.setSelection(undefined); - this._revealInEditor(element); + this._revealInEditor(event, element); return; } @@ -271,9 +270,7 @@ export class BreadcrumbsControl { this._contextViewService.hideContextView(); this._widget.setFocused(undefined); this._widget.setSelection(undefined); - if (data) { - this._revealInEditor(data); - } + this._revealInEditor(event, data); }); this._breadcrumbsPickerShowing = true; this._updateCkBreadcrumbsActive(); @@ -292,16 +289,21 @@ export class BreadcrumbsControl { this._ckBreadcrumbsActive.set(value); } - private _revealInEditor(data: any): void { - if (URI.isUri(data)) { - // open new editor - this._editorService.openEditor({ resource: data }); - } else if (data instanceof FileElement) { - // - this._editorService.openEditor({ resource: data.uri }); + private _revealInEditor(event: IBreadcrumbsItemEvent, data: any): void { + if (data instanceof FileElement) { + if (data.isFile) { + // open file in editor + this._editorService.openEditor({ resource: data.uri }); + } else { + // show next picker + let items = this._widget.getItems(); + let idx = items.indexOf(event.item); + this._widget.setFocused(items[idx + 1]); + this._widget.setSelection(items[idx + 1], BreadcrumbsControl.Payload_Pick); + } } else if (data instanceof OutlineElement) { - // + // open symbol in editor let model = OutlineModel.get(data); this._editorService.openEditor({ resource: model.textModel.uri, diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts index 489fc413a66..4a0fb79250f 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts @@ -225,7 +225,7 @@ export class BreadcrumbsFilePicker extends BreadcrumbsPicker { let [first] = e.selection; let stat = first as IFileStat; if (stat && !stat.isDirectory) { - this._onDidPickElement.fire(stat.resource); + this._onDidPickElement.fire(new FileElement(stat.resource, true)); } } } -- GitLab