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

Fix #50369 - improve "show modified only". Also fix showing values for workspace folder settings

上级 8c84a3a0
...@@ -46,6 +46,7 @@ export class SettingsEditor2 extends BaseEditor { ...@@ -46,6 +46,7 @@ export class SettingsEditor2 extends BaseEditor {
private settingsTargetsWidget: SettingsTargetsWidget; private settingsTargetsWidget: SettingsTargetsWidget;
private showConfiguredSettingsOnlyCheckbox: HTMLInputElement; private showConfiguredSettingsOnlyCheckbox: HTMLInputElement;
private savedExpandedGroups: any[];
private settingsTreeContainer: HTMLElement; private settingsTreeContainer: HTMLElement;
private settingsTree: WorkbenchTree; private settingsTree: WorkbenchTree;
...@@ -267,6 +268,25 @@ export class SettingsEditor2 extends BaseEditor { ...@@ -267,6 +268,25 @@ export class SettingsEditor2 extends BaseEditor {
private onShowConfiguredOnlyClicked(): void { private onShowConfiguredOnlyClicked(): void {
this.viewState.showConfiguredOnly = this.showConfiguredSettingsOnlyCheckbox.checked; this.viewState.showConfiguredOnly = this.showConfiguredSettingsOnlyCheckbox.checked;
this.refreshTree(); this.refreshTree();
// TODO@roblou - This is slow
if (this.viewState.showConfiguredOnly) {
this.savedExpandedGroups = this.settingsTree.getExpandedElements();
const nav = this.settingsTree.getNavigator();
let element;
while (element = nav.next()) {
this.settingsTree.expand(element);
}
} else if (this.savedExpandedGroups) {
const nav = this.settingsTree.getNavigator();
let element;
while (element = nav.next()) {
this.settingsTree.collapse(element);
}
this.settingsTree.expandAll(this.savedExpandedGroups);
this.savedExpandedGroups = null;
}
} }
private onDidChangeSetting(key: string, value: any): void { private onDidChangeSetting(key: string, value: any): void {
......
...@@ -25,6 +25,7 @@ import { SettingsTarget } from 'vs/workbench/parts/preferences/browser/preferenc ...@@ -25,6 +25,7 @@ import { SettingsTarget } from 'vs/workbench/parts/preferences/browser/preferenc
import { ISearchResult, ISetting, ISettingsGroup } from 'vs/workbench/services/preferences/common/preferences'; import { ISearchResult, ISetting, ISettingsGroup } from 'vs/workbench/services/preferences/common/preferences';
import { DefaultSettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels'; import { DefaultSettingsEditorModel } from 'vs/workbench/services/preferences/common/preferencesModels';
import { IMouseEvent } from 'vs/base/browser/mouseEvent'; import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import URI from 'vs/base/common/uri';
const $ = DOM.$; const $ = DOM.$;
...@@ -75,6 +76,17 @@ export interface IGroupElement extends ITreeItem { ...@@ -75,6 +76,17 @@ export interface IGroupElement extends ITreeItem {
export type TreeElement = ISettingElement | IGroupElement; export type TreeElement = ISettingElement | IGroupElement;
export type TreeElementOrRoot = TreeElement | DefaultSettingsEditorModel | SearchResultModel; export type TreeElementOrRoot = TreeElement | DefaultSettingsEditorModel | SearchResultModel;
function inspectSetting(key: string, target: SettingsTarget, configurationService: IConfigurationService): { isConfigured: boolean, inspected: any, targetSelector: string } {
const inspectOverrides = URI.isUri(target) ? { resource: target } : undefined;
const inspected = configurationService.inspect(key, inspectOverrides);
const targetSelector = target === ConfigurationTarget.USER ? 'user' :
target === ConfigurationTarget.WORKSPACE ? 'workspace' :
'workspaceFolder';
const isConfigured = typeof inspected[targetSelector] !== 'undefined';
return { isConfigured, inspected, targetSelector };
}
export class SettingsDataSource implements IDataSource { export class SettingsDataSource implements IDataSource {
constructor( constructor(
private viewState: ISettingsEditorViewState, private viewState: ISettingsEditorViewState,
...@@ -91,9 +103,8 @@ export class SettingsDataSource implements IDataSource { ...@@ -91,9 +103,8 @@ export class SettingsDataSource implements IDataSource {
} }
getSettingElement(setting: ISetting, group: ISettingsGroup): ISettingElement { getSettingElement(setting: ISetting, group: ISettingsGroup): ISettingElement {
const targetSelector = this.viewState.settingsTarget === ConfigurationTarget.USER ? 'user' : 'workspace'; const { isConfigured, inspected, targetSelector } = inspectSetting(setting.key, this.viewState.settingsTarget, this.configurationService);
const inspected = this.configurationService.inspect(setting.key);
const isConfigured = typeof inspected[targetSelector] !== 'undefined';
const displayValue = isConfigured ? inspected[targetSelector] : inspected.default; const displayValue = isConfigured ? inspected[targetSelector] : inspected.default;
const overriddenScopeList = []; const overriddenScopeList = [];
if (targetSelector === 'user' && typeof inspected.workspace !== 'undefined') { if (targetSelector === 'user' && typeof inspected.workspace !== 'undefined') {
...@@ -514,19 +525,35 @@ export class SettingsRenderer implements IRenderer { ...@@ -514,19 +525,35 @@ export class SettingsRenderer implements IRenderer {
} }
export class SettingsTreeFilter implements IFilter { export class SettingsTreeFilter implements IFilter {
constructor(private viewState: ISettingsEditorViewState) { } constructor(
private viewState: ISettingsEditorViewState,
@IConfigurationService private configurationService: IConfigurationService
) { }
isVisible(tree: ITree, element: TreeElement): boolean { isVisible(tree: ITree, element: TreeElement): boolean {
if (this.viewState.showConfiguredOnly && element.type === TreeItemType.setting) { if (this.viewState.showConfiguredOnly && element.type === TreeItemType.setting) {
return element.isConfigured; return element.isConfigured;
} }
if (element.type === TreeItemType.groupTitle) { if (element.type === TreeItemType.groupTitle && this.viewState.showConfiguredOnly) {
// TODO - hide if no visible children return this.groupHasConfiguredSetting(element.group);
} }
return true; return true;
} }
private groupHasConfiguredSetting(group: ISettingsGroup): boolean {
for (let section of group.sections) {
for (let setting of section.settings) {
const { isConfigured } = inspectSetting(setting.key, this.viewState.settingsTarget, this.configurationService);
if (isConfigured) {
return true;
}
}
}
return false;
}
} }
export class SettingsTreeController extends WorkbenchTreeController { export class SettingsTreeController extends WorkbenchTreeController {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册