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

debt - avoid constant settings lookup in lists

上级 d7d55ee7
......@@ -128,12 +128,27 @@ function useSingleClickToOpen(configurationService: IConfigurationService): bool
return configurationService.getValue(openModeSettingKey) !== 'doubleClick';
}
class MultipleSelectionController<T> implements IMultipleSelectionController<T> {
class MultipleSelectionController<T> extends Disposable implements IMultipleSelectionController<T> {
private useAltAsMultipleSelectionModifier: boolean;
constructor(private configurationService: IConfigurationService) { }
constructor(private configurationService: IConfigurationService) {
super();
this.useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);
this.registerListeners();
}
private registerListeners(): void {
this._register(this.configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration(multiSelectModifierSettingKey)) {
this.useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(this.configurationService);
}
}));
}
isSelectionSingleChangeEvent(event: IListMouseEvent<T> | IListTouchEvent<T>): boolean {
if (useAltAsMultipleSelectionModifier(this.configurationService)) {
if (this.useAltAsMultipleSelectionModifier) {
return event.browserEvent.altKey;
}
......@@ -145,14 +160,29 @@ class MultipleSelectionController<T> implements IMultipleSelectionController<T>
}
}
class WorkbenchOpenController implements IOpenController {
class WorkbenchOpenController extends Disposable implements IOpenController {
private openOnSingleClick: boolean;
constructor(private configurationService: IConfigurationService, private existingOpenController?: IOpenController) {
super();
this.openOnSingleClick = useSingleClickToOpen(configurationService);
constructor(private configurationService: IConfigurationService, private existingOpenController?: IOpenController) { }
this.registerListeners();
}
private registerListeners(): void {
this._register(this.configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration(openModeSettingKey)) {
this.openOnSingleClick = useSingleClickToOpen(this.configurationService);
}
}));
}
shouldOpen(event: UIEvent): boolean {
if (event instanceof MouseEvent) {
const isDoubleClick = event.detail === 2;
if (!useSingleClickToOpen(this.configurationService) && !isDoubleClick) {
if (!this.openOnSingleClick && !isDoubleClick) {
return false;
}
......@@ -167,14 +197,19 @@ class WorkbenchOpenController implements IOpenController {
}
}
function toWorkbenchListOptions<T>(options: IListOptions<T>, configurationService: IConfigurationService, keybindingService: IKeybindingService): IListOptions<T> {
function toWorkbenchListOptions<T>(options: IListOptions<T>, configurationService: IConfigurationService, keybindingService: IKeybindingService): [IListOptions<T>, IDisposable] {
const disposables: IDisposable[] = [];
const result = { ...options };
if (options.multipleSelectionSupport !== false && !options.multipleSelectionController) {
result.multipleSelectionController = new MultipleSelectionController(configurationService);
const multipleSelectionController = new MultipleSelectionController(configurationService);
result.multipleSelectionController = multipleSelectionController;
disposables.push(multipleSelectionController);
}
result.openController = new WorkbenchOpenController(configurationService, options.openController);
const openController = new WorkbenchOpenController(configurationService, options.openController);
result.openController = openController;
disposables.push(openController);
if (options.keyboardNavigationLabelProvider) {
const tlp = options.keyboardNavigationLabelProvider;
......@@ -185,7 +220,7 @@ function toWorkbenchListOptions<T>(options: IListOptions<T>, configurationServic
};
}
return result;
return [result, combinedDisposable(disposables)];
}
let sharedListStyleSheet: HTMLStyleElement;
......@@ -241,17 +276,20 @@ export class WorkbenchList<T> extends List<T> {
@IKeybindingService keybindingService: IKeybindingService
) {
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue<boolean>(horizontalScrollingKey);
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
super(container, delegate, renderers,
{
keyboardSupport: false,
styleController: new DefaultStyleController(getSharedListStyleSheet()),
...computeStyles(themeService.getTheme(), defaultListStyles),
...toWorkbenchListOptions(options, configurationService, keybindingService),
...workbenchListOptions,
horizontalScrolling
} as IListOptions<T>
);
this.disposables.push(workbenchListOptionsDisposable);
this.contextKeyService = createScopedContextKeyService(contextKeyService, this);
this.configurationService = configurationService;
......@@ -951,12 +989,13 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue<boolean>(horizontalScrollingKey);
const openOnSingleClick = useSingleClickToOpen(configurationService);
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
super(container, delegate, renderers, {
keyboardSupport: false,
styleController: new DefaultStyleController(getSharedListStyleSheet()),
...computeStyles(themeService.getTheme(), defaultListStyles),
...toWorkbenchListOptions(options, configurationService, keybindingService),
...workbenchListOptions,
indent: configurationService.getValue(treeIndentKey),
automaticKeyboardNavigation,
simpleKeyboardNavigation: keyboardNavigation === 'simple',
......@@ -966,6 +1005,8 @@ export class WorkbenchObjectTree<T extends NonNullable<any>, TFilterData = void>
keyboardNavigationEventFilter: createKeyboardNavigationEventFilter(container, keybindingService)
});
this.disposables.push(workbenchListOptionsDisposable);
this.contextKeyService = createScopedContextKeyService(contextKeyService, this);
const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);
......@@ -1067,12 +1108,13 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue<boolean>(horizontalScrollingKey);
const openOnSingleClick = useSingleClickToOpen(configurationService);
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
super(container, delegate, renderers, dataSource, {
keyboardSupport: false,
styleController: new DefaultStyleController(getSharedListStyleSheet()),
...computeStyles(themeService.getTheme(), defaultListStyles),
...toWorkbenchListOptions(options, configurationService, keybindingService),
...workbenchListOptions,
indent: configurationService.getValue(treeIndentKey),
automaticKeyboardNavigation,
simpleKeyboardNavigation: keyboardNavigation === 'simple',
......@@ -1082,6 +1124,8 @@ export class WorkbenchDataTree<TInput, T, TFilterData = void> extends DataTree<T
keyboardNavigationEventFilter: createKeyboardNavigationEventFilter(container, keybindingService)
});
this.disposables.push(workbenchListOptionsDisposable);
this.contextKeyService = createScopedContextKeyService(contextKeyService, this);
const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);
......@@ -1178,12 +1222,13 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
const keyboardNavigation = configurationService.getValue<string>(keyboardNavigationSettingKey);
const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue<boolean>(horizontalScrollingKey);
const openOnSingleClick = useSingleClickToOpen(configurationService);
const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);
super(container, delegate, renderers, dataSource, {
keyboardSupport: false,
styleController: new DefaultStyleController(getSharedListStyleSheet()),
...computeStyles(themeService.getTheme(), defaultListStyles),
...toWorkbenchListOptions(options, configurationService, keybindingService),
...workbenchListOptions,
indent: configurationService.getValue<number>(treeIndentKey),
automaticKeyboardNavigation,
simpleKeyboardNavigation: keyboardNavigation === 'simple',
......@@ -1193,6 +1238,8 @@ export class WorkbenchAsyncDataTree<TInput, T, TFilterData = void> extends Async
keyboardNavigationEventFilter: createKeyboardNavigationEventFilter(container, keybindingService)
});
this.disposables.push(workbenchListOptionsDisposable);
this.contextKeyService = createScopedContextKeyService(contextKeyService, this);
const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册