提交 3ce8963a 编写于 作者: R Rob Lourens

Settings editor - TOC should only expand the section with a selected item

上级 643a15e5
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as _ from 'vs/base/parts/tree/browser/tree';
export function collapseAll(tree: _.ITree): void {
const nav = tree.getNavigator();
let cur;
while (cur = nav.next()) {
tree.collapse(cur);
}
}
export function expandAll(tree: _.ITree): void {
const nav = tree.getNavigator();
let cur;
while (cur = nav.next()) {
tree.expand(cur);
}
}
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import * as DOM from 'vs/base/browser/dom'; import * as DOM from 'vs/base/browser/dom';
import { Separator } from 'vs/base/browser/ui/actionbar/actionbar';
import { Button } from 'vs/base/browser/ui/button/button'; import { Button } from 'vs/base/browser/ui/button/button';
import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar'; import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar';
import { Action } from 'vs/base/common/actions'; import { Action } from 'vs/base/common/actions';
...@@ -15,7 +16,8 @@ import { getErrorMessage, isPromiseCanceledError } from 'vs/base/common/errors'; ...@@ -15,7 +16,8 @@ import { getErrorMessage, isPromiseCanceledError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri'; import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { ITreeConfiguration } from 'vs/base/parts/tree/browser/tree'; import { ITreeConfiguration } from 'vs/base/parts/tree/browser/tree';
import { OpenMode, DefaultTreestyler } from 'vs/base/parts/tree/browser/treeDefaults'; import { DefaultTreestyler, OpenMode } from 'vs/base/parts/tree/browser/treeDefaults';
import { collapseAll, expandAll } from 'vs/base/parts/tree/browser/treeUtils';
import 'vs/css!./media/settingsEditor2'; import 'vs/css!./media/settingsEditor2';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { ConfigurationTarget, IConfigurationOverrides, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ConfigurationTarget, IConfigurationOverrides, IConfigurationService } from 'vs/platform/configuration/common/configuration';
...@@ -26,22 +28,21 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti ...@@ -26,22 +28,21 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { WorkbenchTree, WorkbenchTreeController } from 'vs/platform/list/browser/listService'; import { WorkbenchTree, WorkbenchTreeController } from 'vs/platform/list/browser/listService';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { editorBackground, foreground } from 'vs/platform/theme/common/colorRegistry';
import { attachButtonStyler, attachStyler } from 'vs/platform/theme/common/styler'; import { attachButtonStyler, attachStyler } from 'vs/platform/theme/common/styler';
import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IThemeService } from 'vs/platform/theme/common/themeService';
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor'; import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { EditorOptions, IEditor } from 'vs/workbench/common/editor'; import { EditorOptions, IEditor } from 'vs/workbench/common/editor';
import { PreferencesEditor } from 'vs/workbench/parts/preferences/browser/preferencesEditor';
import { SearchWidget, SettingsTarget, SettingsTargetsWidget } from 'vs/workbench/parts/preferences/browser/preferencesWidgets'; import { SearchWidget, SettingsTarget, SettingsTargetsWidget } from 'vs/workbench/parts/preferences/browser/preferencesWidgets';
import { commonlyUsedData, tocData } from 'vs/workbench/parts/preferences/browser/settingsLayout'; import { commonlyUsedData, tocData } from 'vs/workbench/parts/preferences/browser/settingsLayout';
import { ISettingsEditorViewState, resolveExtensionsSettings, resolveSettingsTree, SearchResultIdx, SearchResultModel, SettingsRenderer, SettingsTree, SettingsTreeElement, SettingsTreeFilter, SettingsTreeGroupElement, SettingsTreeModel, SettingsTreeSettingElement, MODIFIED_SETTING_TAG, ONLINE_SERVICES_SETTING_TAG } from 'vs/workbench/parts/preferences/browser/settingsTree'; import { ISettingsEditorViewState, MODIFIED_SETTING_TAG, ONLINE_SERVICES_SETTING_TAG, resolveExtensionsSettings, resolveSettingsTree, SearchResultIdx, SearchResultModel, SettingsRenderer, SettingsTree, SettingsTreeElement, SettingsTreeFilter, SettingsTreeGroupElement, SettingsTreeModel, SettingsTreeSettingElement } from 'vs/workbench/parts/preferences/browser/settingsTree';
import { settingsHeaderForeground } from 'vs/workbench/parts/preferences/browser/settingsWidgets';
import { TOCDataSource, TOCRenderer, TOCTreeModel } from 'vs/workbench/parts/preferences/browser/tocTree'; import { TOCDataSource, TOCRenderer, TOCTreeModel } from 'vs/workbench/parts/preferences/browser/tocTree';
import { CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_FIRST_ROW_FOCUS, CONTEXT_SETTINGS_ROW_FOCUS, CONTEXT_SETTINGS_SEARCH_FOCUS, CONTEXT_TOC_ROW_FOCUS, IPreferencesSearchService, ISearchProvider } from 'vs/workbench/parts/preferences/common/preferences'; import { CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_FIRST_ROW_FOCUS, CONTEXT_SETTINGS_ROW_FOCUS, CONTEXT_SETTINGS_SEARCH_FOCUS, CONTEXT_TOC_ROW_FOCUS, IPreferencesSearchService, ISearchProvider } from 'vs/workbench/parts/preferences/common/preferences';
import { IPreferencesService, ISearchResult, ISettingsEditorModel } from 'vs/workbench/services/preferences/common/preferences'; import { IPreferencesService, ISearchResult, ISettingsEditorModel } from 'vs/workbench/services/preferences/common/preferences';
import { SettingsEditor2Input } from 'vs/workbench/services/preferences/common/preferencesEditorInput'; import { SettingsEditor2Input } from 'vs/workbench/services/preferences/common/preferencesEditorInput';
import { DefaultSettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels'; import { DefaultSettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels';
import { editorBackground, foreground } from 'vs/platform/theme/common/colorRegistry';
import { settingsHeaderForeground } from 'vs/workbench/parts/preferences/browser/settingsWidgets';
import { Separator } from 'vs/base/browser/ui/actionbar/actionbar';
import { PreferencesEditor } from 'vs/workbench/parts/preferences/browser/preferencesEditor';
const $ = DOM.$; const $ = DOM.$;
...@@ -462,11 +463,15 @@ export class SettingsEditor2 extends BaseEditor { ...@@ -462,11 +463,15 @@ export class SettingsEditor2 extends BaseEditor {
null; null;
if (element && this.tocTree.getSelection()[0] !== element) { if (element && this.tocTree.getSelection()[0] !== element) {
this.tocTree.reveal(element);
const elementTop = this.tocTree.getRelativeTop(element); const elementTop = this.tocTree.getRelativeTop(element);
collapseAll(this.tocTree);
if (elementTop < 0) { if (elementTop < 0) {
this.tocTree.reveal(element, 0); this.tocTree.reveal(element, 0);
} else if (elementTop > 1) { } else if (elementTop > 1) {
this.tocTree.reveal(element, 1); this.tocTree.reveal(element, 1);
} else {
this.tocTree.reveal(element, elementTop);
} }
this.tocTree.setSelection([element]); this.tocTree.setSelection([element]);
...@@ -701,9 +706,8 @@ export class SettingsEditor2 extends BaseEditor { ...@@ -701,9 +706,8 @@ export class SettingsEditor2 extends BaseEditor {
this.viewState.filterToCategory = null; this.viewState.filterToCategory = null;
this.tocTree.refresh(); this.tocTree.refresh();
this.toggleSearchMode(); this.toggleSearchMode();
this.settingsTree.setInput(this.settingsTreeModel.root); collapseAll(this.tocTree);
return this.settingsTree.setInput(this.settingsTreeModel.root);
return TPromise.wrap(null);
} }
} }
...@@ -776,6 +780,8 @@ export class SettingsEditor2 extends BaseEditor { ...@@ -776,6 +780,8 @@ export class SettingsEditor2 extends BaseEditor {
} }
this.tocTreeModel.update(); this.tocTreeModel.update();
expandAll(this.tocTree);
resolve(this.refreshTreeAndMaintainFocus()); resolve(this.refreshTreeAndMaintainFocus());
}); });
}, () => { }, () => {
......
...@@ -102,10 +102,6 @@ export class TOCDataSource implements IDataSource { ...@@ -102,10 +102,6 @@ export class TOCDataSource implements IDataSource {
getParent(tree: ITree, element: TOCTreeElement): TPromise<any, any> { getParent(tree: ITree, element: TOCTreeElement): TPromise<any, any> {
return TPromise.wrap(element instanceof SettingsTreeGroupElement && element.parent); return TPromise.wrap(element instanceof SettingsTreeGroupElement && element.parent);
} }
shouldAutoexpand() {
return true;
}
} }
const TOC_ENTRY_TEMPLATE_ID = 'settings.toc.entry'; const TOC_ENTRY_TEMPLATE_ID = 'settings.toc.entry';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册