提交 4925df27 编写于 作者: J Joao Moreno

Merge commit 'refs/pull/60051/head' of github.com:Microsoft/vscode into pr/60051

...@@ -720,6 +720,11 @@ declare module 'vscode' { ...@@ -720,6 +720,11 @@ declare module 'vscode' {
* An event signaling when the selection state changes. * An event signaling when the selection state changes.
*/ */
readonly onDidChangeSelection: Event<boolean>; readonly onDidChangeSelection: Event<boolean>;
/**
* Whether the input box is hidden.
*/
hideInputBox: boolean;
} }
//#endregion //#endregion
......
...@@ -119,6 +119,7 @@ class MainThreadSCMProvider implements ISCMProvider { ...@@ -119,6 +119,7 @@ class MainThreadSCMProvider implements ISCMProvider {
get acceptInputCommand(): Command | undefined { return this.features.acceptInputCommand; } get acceptInputCommand(): Command | undefined { return this.features.acceptInputCommand; }
get statusBarCommands(): Command[] | undefined { return this.features.statusBarCommands; } get statusBarCommands(): Command[] | undefined { return this.features.statusBarCommands; }
get count(): number | undefined { return this.features.count; } get count(): number | undefined { return this.features.count; }
get hideInputBox(): boolean | undefined { return this.features.hideInputBox; }
private _onDidChangeCommitTemplate = new Emitter<string>(); private _onDidChangeCommitTemplate = new Emitter<string>();
get onDidChangeCommitTemplate(): Event<string> { return this._onDidChangeCommitTemplate.event; } get onDidChangeCommitTemplate(): Event<string> { return this._onDidChangeCommitTemplate.event; }
......
...@@ -535,6 +535,7 @@ export interface SCMProviderFeatures { ...@@ -535,6 +535,7 @@ export interface SCMProviderFeatures {
commitTemplate?: string; commitTemplate?: string;
acceptInputCommand?: modes.Command; acceptInputCommand?: modes.Command;
statusBarCommands?: modes.Command[]; statusBarCommands?: modes.Command[];
hideInputBox?: boolean;
} }
export interface SCMGroupFeatures { export interface SCMGroupFeatures {
......
...@@ -439,6 +439,17 @@ class ExtHostSourceControl implements vscode.SourceControl { ...@@ -439,6 +439,17 @@ class ExtHostSourceControl implements vscode.SourceControl {
return this._selected; return this._selected;
} }
private _hideInputBox: boolean = false;
get hideInputBox(): boolean {
return this._hideInputBox;
}
set hideInputBox(hideInputBox: boolean | undefined) {
this._hideInputBox = hideInputBox;
this._proxy.$updateSourceControl(this.handle, { hideInputBox: !!hideInputBox });
}
private _onDidChangeSelection = new Emitter<boolean>(); private _onDidChangeSelection = new Emitter<boolean>();
readonly onDidChangeSelection = this._onDidChangeSelection.event; readonly onDidChangeSelection = this._onDidChangeSelection.event;
......
...@@ -814,57 +814,59 @@ export class RepositoryPanel extends ViewletPanel { ...@@ -814,57 +814,59 @@ export class RepositoryPanel extends ViewletPanel {
this.disposables.push(focusTracker); this.disposables.push(focusTracker);
// Input // Input
this.inputBoxContainer = append(container, $('.scm-editor')); if (!this.repository.provider.hideInputBox) {
this.inputBoxContainer = append(container, $('.scm-editor'));
const updatePlaceholder = () => {
const binding = this.keybindingService.lookupKeybinding('scm.acceptInput'); const updatePlaceholder = () => {
const label = binding ? binding.getLabel() : (platform.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter'); const binding = this.keybindingService.lookupKeybinding('scm.acceptInput');
const placeholder = format(this.repository.input.placeholder, label); const label = binding ? binding.getLabel() : (platform.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter');
const placeholder = format(this.repository.input.placeholder, label);
this.inputBox.setPlaceHolder(placeholder);
}; this.inputBox.setPlaceHolder(placeholder);
};
const validationDelayer = new ThrottledDelayer<any>(200);
const validate = () => { const validationDelayer = new ThrottledDelayer<any>(200);
return this.repository.input.validateInput(this.inputBox.value, this.inputBox.inputElement.selectionStart).then(result => { const validate = () => {
if (!result) { return this.repository.input.validateInput(this.inputBox.value, this.inputBox.inputElement.selectionStart).then(result => {
this.inputBox.inputElement.removeAttribute('aria-invalid'); if (!result) {
this.inputBox.hideMessage(); this.inputBox.inputElement.removeAttribute('aria-invalid');
} else { this.inputBox.hideMessage();
this.inputBox.inputElement.setAttribute('aria-invalid', 'true'); } else {
this.inputBox.showMessage({ content: result.message, type: convertValidationType(result.type) }); this.inputBox.inputElement.setAttribute('aria-invalid', 'true');
} this.inputBox.showMessage({ content: result.message, type: convertValidationType(result.type) });
}); }
}; });
};
const triggerValidation = () => validationDelayer.trigger(validate);
const triggerValidation = () => validationDelayer.trigger(validate);
this.inputBox = new InputBox(this.inputBoxContainer, this.contextViewService, { flexibleHeight: true });
this.disposables.push(attachInputBoxStyler(this.inputBox, this.themeService)); this.inputBox = new InputBox(this.inputBoxContainer, this.contextViewService, { flexibleHeight: true });
this.disposables.push(this.inputBox); this.disposables.push(attachInputBoxStyler(this.inputBox, this.themeService));
this.disposables.push(this.inputBox);
this.inputBox.onDidChange(triggerValidation, null, this.disposables);
this.inputBox.onDidChange(triggerValidation, null, this.disposables);
const onKeyUp = domEvent(this.inputBox.inputElement, 'keyup');
const onMouseUp = domEvent(this.inputBox.inputElement, 'mouseup'); const onKeyUp = domEvent(this.inputBox.inputElement, 'keyup');
anyEvent<any>(onKeyUp, onMouseUp)(triggerValidation, null, this.disposables); const onMouseUp = domEvent(this.inputBox.inputElement, 'mouseup');
anyEvent<any>(onKeyUp, onMouseUp)(triggerValidation, null, this.disposables);
this.inputBox.value = this.repository.input.value;
this.inputBox.onDidChange(value => this.repository.input.value = value, null, this.disposables); this.inputBox.value = this.repository.input.value;
this.repository.input.onDidChange(value => this.inputBox.value = value, null, this.disposables); this.inputBox.onDidChange(value => this.repository.input.value = value, null, this.disposables);
this.repository.input.onDidChange(value => this.inputBox.value = value, null, this.disposables);
updatePlaceholder();
this.repository.input.onDidChangePlaceholder(updatePlaceholder, null, this.disposables); updatePlaceholder();
this.keybindingService.onDidUpdateKeybindings(updatePlaceholder, null, this.disposables); this.repository.input.onDidChangePlaceholder(updatePlaceholder, null, this.disposables);
this.keybindingService.onDidUpdateKeybindings(updatePlaceholder, null, this.disposables);
this.disposables.push(this.inputBox.onDidHeightChange(() => this.layoutBody()));
this.disposables.push(this.inputBox.onDidHeightChange(() => this.layoutBody()));
if (this.repository.provider.onDidChangeCommitTemplate) {
this.repository.provider.onDidChangeCommitTemplate(this.updateInputBox, this, this.disposables);
}
if (this.repository.provider.onDidChangeCommitTemplate) { this.updateInputBox();
this.repository.provider.onDidChangeCommitTemplate(this.updateInputBox, this, this.disposables);
} }
this.updateInputBox();
// List // List
this.listContainer = append(container, $('.scm-status.show-file-icons')); this.listContainer = append(container, $('.scm-status.show-file-icons'));
...@@ -918,20 +920,24 @@ export class RepositoryPanel extends ViewletPanel { ...@@ -918,20 +920,24 @@ export class RepositoryPanel extends ViewletPanel {
} }
this.cachedHeight = height; this.cachedHeight = height;
this.inputBox.layout(); if (this.inputBox) {
this.inputBox.layout();
}
const editorHeight = this.inputBox.height; const editorHeight = this.inputBox ? this.inputBox.height : 0;
const listHeight = height - (editorHeight + 12 /* margin */); const listHeight = height - (editorHeight + (editorHeight ? 12 : 0) /* margin */);
this.listContainer.style.height = `${listHeight}px`; this.listContainer.style.height = `${listHeight}px`;
this.list.layout(listHeight); this.list.layout(listHeight);
toggleClass(this.inputBoxContainer, 'scroll', editorHeight >= 134); if (this.inputBoxContainer) {
toggleClass(this.inputBoxContainer, 'scroll', editorHeight >= 134);
}
} }
focus(): void { focus(): void {
super.focus(); super.focus();
if (this.isExpanded()) { if (this.isExpanded() && this.inputBox) {
this.inputBox.focus(); this.inputBox.focus();
} }
} }
...@@ -991,7 +997,7 @@ export class RepositoryPanel extends ViewletPanel { ...@@ -991,7 +997,7 @@ export class RepositoryPanel extends ViewletPanel {
} }
private updateInputBox(): void { private updateInputBox(): void {
if (typeof this.repository.provider.commitTemplate === 'undefined' || this.inputBox.value) { if (typeof this.repository.provider.commitTemplate === 'undefined' || !this.inputBox || this.inputBox.value) {
return; return;
} }
......
...@@ -63,6 +63,8 @@ export interface ISCMProvider extends IDisposable { ...@@ -63,6 +63,8 @@ export interface ISCMProvider extends IDisposable {
readonly statusBarCommands?: Command[]; readonly statusBarCommands?: Command[];
readonly onDidChange: Event<void>; readonly onDidChange: Event<void>;
readonly hideInputBox?: boolean | undefined;
getOriginalResource(uri: URI): TPromise<URI>; getOriginalResource(uri: URI): TPromise<URI>;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册