提交 e3b9da45 编写于 作者: C Christof Marti

Select All checkbox

上级 33dce47d
...@@ -17,12 +17,14 @@ ...@@ -17,12 +17,14 @@
padding: 6px; padding: 6px;
} }
.quick-input-box { .quick-input-select-all {
flex-grow: 1; align-self: center;
margin: 0;
} }
.quick-input-box .monaco-inputbox > .wrapper > .input { .quick-input-box {
padding-left: 15px; flex-grow: 1;
margin-left: 5px;
} }
.quick-input-action { .quick-input-action {
...@@ -36,7 +38,6 @@ ...@@ -36,7 +38,6 @@
} }
.quick-input-checkbox-list { .quick-input-checkbox-list {
margin-left: 3px;
line-height: 22px; line-height: 22px;
} }
...@@ -49,6 +50,7 @@ ...@@ -49,6 +50,7 @@
overflow: hidden; overflow: hidden;
display: flex; display: flex;
height: 100%; height: 100%;
padding: 0 6px;
} }
.quick-input-checkbox-list .quick-input-checkbox-list-label { .quick-input-checkbox-list .quick-input-checkbox-list-label {
...@@ -60,6 +62,7 @@ ...@@ -60,6 +62,7 @@
.quick-input-checkbox-list .quick-input-checkbox-list-checkbox { .quick-input-checkbox-list .quick-input-checkbox-list-checkbox {
align-self: center; align-self: center;
margin: 0;
/* TODO */ /* TODO */
/* margin-top: 5px; */ /* margin-top: 5px; */
} }
...@@ -71,7 +74,7 @@ ...@@ -71,7 +74,7 @@
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
flex: 1; flex: 1;
margin-left: 1px; margin-left: 10px;
} }
.quick-input-checkbox-list .quick-input-checkbox-list-rows > .quick-input-checkbox-list-row { .quick-input-checkbox-list .quick-input-checkbox-list-rows > .quick-input-checkbox-list-row {
......
...@@ -37,6 +37,7 @@ export class QuickInputService extends Component implements IQuickInputService { ...@@ -37,6 +37,7 @@ export class QuickInputService extends Component implements IQuickInputService {
private layoutDimensions: Dimension; private layoutDimensions: Dimension;
private container: HTMLElement; private container: HTMLElement;
private selectAll: HTMLInputElement;
private inputBox: QuickInputBox; private inputBox: QuickInputBox;
private checkboxList: QuickInputCheckboxList; private checkboxList: QuickInputCheckboxList;
...@@ -63,6 +64,13 @@ export class QuickInputService extends Component implements IQuickInputService { ...@@ -63,6 +64,13 @@ export class QuickInputService extends Component implements IQuickInputService {
const headerContainer = dom.append(this.container, $('.quick-input-header')); const headerContainer = dom.append(this.container, $('.quick-input-header'));
this.selectAll = <HTMLInputElement>dom.append(headerContainer, $('input.quick-input-select-all'));
this.selectAll.type = 'checkbox';
this.toUnbind.push(dom.addStandardDisposableListener(this.selectAll, dom.EventType.CHANGE, e => {
const checked = this.selectAll.checked;
this.checkboxList.setAllSelected(checked);
}));
this.inputBox = new QuickInputBox(headerContainer); this.inputBox = new QuickInputBox(headerContainer);
this.toUnbind.push(this.inputBox); this.toUnbind.push(this.inputBox);
this.inputBox.style(this.themeService.getTheme()); this.inputBox.style(this.themeService.getTheme());
...@@ -97,6 +105,9 @@ export class QuickInputService extends Component implements IQuickInputService { ...@@ -97,6 +105,9 @@ export class QuickInputService extends Component implements IQuickInputService {
this.checkboxList = this.instantiationService.createInstance(QuickInputCheckboxList, this.container); this.checkboxList = this.instantiationService.createInstance(QuickInputCheckboxList, this.container);
this.toUnbind.push(this.checkboxList); this.toUnbind.push(this.checkboxList);
this.toUnbind.push(this.checkboxList.onSelectionChanged(() => {
this.selectAll.checked = this.checkboxList.getAllSelected();
}));
this.toUnbind.push(dom.addDisposableListener(this.container, 'focusout', (e: FocusEvent) => { this.toUnbind.push(dom.addDisposableListener(this.container, 'focusout', (e: FocusEvent) => {
for (let element = <Element>e.relatedTarget; element; element = element.parentElement) { for (let element = <Element>e.relatedTarget; element; element = element.parentElement) {
...@@ -150,6 +161,7 @@ export class QuickInputService extends Component implements IQuickInputService { ...@@ -150,6 +161,7 @@ export class QuickInputService extends Component implements IQuickInputService {
this.inputBox.setPlaceholder(options.placeHolder ? localize('quickInput.ctrlSpaceToSelectWithPlaceholder', "{1} ({0} to toggle)", 'Ctrl+Space', options.placeHolder) : localize('quickInput.ctrlSpaceToSelect', "{0} to toggle", 'Ctrl+Space')); this.inputBox.setPlaceholder(options.placeHolder ? localize('quickInput.ctrlSpaceToSelectWithPlaceholder', "{1} ({0} to toggle)", 'Ctrl+Space', options.placeHolder) : localize('quickInput.ctrlSpaceToSelect', "{0} to toggle", 'Ctrl+Space'));
// TODO: Progress indication. // TODO: Progress indication.
this.checkboxList.setElements(await picks); this.checkboxList.setElements(await picks);
this.selectAll.checked = this.checkboxList.getAllSelected();
this.container.style.display = null; this.container.style.display = null;
this.updateLayout(); this.updateLayout();
......
...@@ -15,7 +15,7 @@ import { IPickOpenEntry } from 'vs/platform/quickOpen/common/quickOpen'; ...@@ -15,7 +15,7 @@ import { IPickOpenEntry } from 'vs/platform/quickOpen/common/quickOpen';
import { IMatch } from 'vs/base/common/filters'; import { IMatch } from 'vs/base/common/filters';
import { matchesFuzzyOcticonAware, parseOcticons } from 'vs/base/common/octicon'; import { matchesFuzzyOcticonAware, parseOcticons } from 'vs/base/common/octicon';
import { compareAnything } from 'vs/base/common/comparers'; import { compareAnything } from 'vs/base/common/comparers';
import { Emitter } from 'vs/base/common/event'; import { Emitter, Event } from 'vs/base/common/event';
import { assign } from 'vs/base/common/objects'; import { assign } from 'vs/base/common/objects';
import { KeyCode } from 'vs/base/common/keyCodes'; import { KeyCode } from 'vs/base/common/keyCodes';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
...@@ -103,7 +103,7 @@ class SelectedElementRenderer implements IRenderer<SelectableElement, ISelectedE ...@@ -103,7 +103,7 @@ class SelectedElementRenderer implements IRenderer<SelectableElement, ISelectedE
} }
renderElement(element: SelectableElement, index: number, data: ISelectedElementTemplateData): void { renderElement(element: SelectableElement, index: number, data: ISelectedElementTemplateData): void {
dispose(data.toDisposeElement); data.toDisposeElement = dispose(data.toDisposeElement);
data.element = element; data.element = element;
data.checkbox.checked = element.selected; data.checkbox.checked = element.selected;
data.toDisposeElement.push(element.onSelected(selected => data.checkbox.checked = selected)); data.toDisposeElement.push(element.onSelected(selected => data.checkbox.checked = selected));
...@@ -122,7 +122,8 @@ class SelectedElementRenderer implements IRenderer<SelectableElement, ISelectedE ...@@ -122,7 +122,8 @@ class SelectedElementRenderer implements IRenderer<SelectableElement, ISelectedE
} }
disposeTemplate(data: ISelectedElementTemplateData): void { disposeTemplate(data: ISelectedElementTemplateData): void {
dispose(data.toDisposeTemplate); data.toDisposeElement = dispose(data.toDisposeElement);
data.toDisposeTemplate = dispose(data.toDisposeTemplate);
} }
} }
...@@ -142,6 +143,9 @@ export class QuickInputCheckboxList { ...@@ -142,6 +143,9 @@ export class QuickInputCheckboxList {
private container: HTMLElement; private container: HTMLElement;
private list: WorkbenchList<SelectableElement>; private list: WorkbenchList<SelectableElement>;
private elements: SelectableElement[] = []; private elements: SelectableElement[] = [];
private _onSelectionChanged = new Emitter<IPickOpenEntry>();
onSelectionChanged: Event<IPickOpenEntry> = this._onSelectionChanged.event;
private elementDisposables: IDisposable[] = [];
private disposables: IDisposable[] = []; private disposables: IDisposable[] = [];
constructor( constructor(
...@@ -163,12 +167,24 @@ export class QuickInputCheckboxList { ...@@ -163,12 +167,24 @@ export class QuickInputCheckboxList {
})); }));
} }
getAllSelected() {
return this.getSelectedElements().length === this.elements.length;
}
setAllSelected(select: boolean) {
this.elements.forEach(element => element.selected = select);
}
setElements(elements: IPickOpenEntry[]): void { setElements(elements: IPickOpenEntry[]): void {
this.elementDisposables = dispose(this.elementDisposables);
this.elements = elements.map((item, index) => new SelectableElement({ this.elements = elements.map((item, index) => new SelectableElement({
index, index,
item, item,
selected: !!item.selected selected: !!item.selected
})); }));
this.elementDisposables.push(...this.elements.map(element => element.onSelected(() => {
this._onSelectionChanged.fire(element.item);
})));
this.list.splice(0, this.list.length, this.elements); this.list.splice(0, this.list.length, this.elements);
this.list.setSelection([]); this.list.setSelection([]);
this.list.focusFirst(); this.list.focusFirst();
...@@ -244,6 +260,7 @@ export class QuickInputCheckboxList { ...@@ -244,6 +260,7 @@ export class QuickInputCheckboxList {
} }
dispose() { dispose() {
this.elementDisposables = dispose(this.elementDisposables);
this.disposables = dispose(this.disposables); this.disposables = dispose(this.disposables);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册