提交 c7eff5b7 编写于 作者: R rebornix

progress bar for find and replace

上级 5f4f23f8
......@@ -40,6 +40,22 @@
margin: 0 0 0 17px;
}
.monaco-workbench .simple-fr-find-part-wrapper .find-replace-progress {
width: 100%;
height: 2px;
position: absolute;
}
.monaco-workbench .simple-fr-find-part-wrapper .find-replace-progress .monaco-progress-container {
height: 2px;
top: 0px !important;
z-index: 100 !important;
}
.monaco-workbench .simple-fr-find-part-wrapper .find-replace-progress .monaco-progress-container .progress-bit {
height: 2px;
}
.monaco-workbench .simple-fr-find-part-wrapper .monaco-findInput {
width: 224px;
}
......
......@@ -16,9 +16,11 @@ import { SimpleButton } from 'vs/editor/contrib/find/findWidget';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { editorWidgetBackground, inputActiveOptionBorder, inputActiveOptionBackground, inputBackground, inputBorder, inputForeground, inputValidationErrorBackground, inputValidationErrorBorder, inputValidationErrorForeground, inputValidationInfoBackground, inputValidationInfoBorder, inputValidationInfoForeground, inputValidationWarningBackground, inputValidationWarningBorder, inputValidationWarningForeground, widgetShadow, editorWidgetForeground } from 'vs/platform/theme/common/colorRegistry';
import { IColorTheme, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { IColorTheme, registerThemingParticipant, IThemeService } from 'vs/platform/theme/common/themeService';
import { ContextScopedFindInput, ContextScopedReplaceInput } from 'vs/platform/browser/contextScopedHistoryWidget';
import { ReplaceInput, IReplaceInputStyles } from 'vs/base/browser/ui/findinput/replaceInput';
import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar';
import { attachProgressBarStyler } from 'vs/platform/theme/common/styler';
const NLS_FIND_INPUT_LABEL = nls.localize('label.find', "Find");
const NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', "Find");
......@@ -53,9 +55,13 @@ export abstract class SimpleFindReplaceWidget extends Widget {
private _isReplaceVisible: boolean = false;
private foundMatch: boolean = false;
protected _progressBar!: ProgressBar;
constructor(
@IContextViewService private readonly _contextViewService: IContextViewService,
@IContextKeyService contextKeyService: IContextKeyService,
@IThemeService private readonly _themeService: IThemeService,
private readonly _state: FindReplaceState = new FindReplaceState(),
showOptionButtons?: boolean
) {
......@@ -65,6 +71,11 @@ export abstract class SimpleFindReplaceWidget extends Widget {
this._domNode.classList.add('simple-fr-find-part-wrapper');
this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));
let progressContainer = dom.$('.find-replace-progress');
this._progressBar = new ProgressBar(progressContainer);
this._register(attachProgressBarStyler(this._progressBar, this._themeService));
this._domNode.appendChild(progressContainer);
// Toggle replace button
this._toggleReplaceBtn = this._register(new SimpleButton({
label: NLS_TOGGLE_REPLACE_MODE_BTN_LABEL,
......
......@@ -14,6 +14,7 @@ import { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer'
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { SimpleFindReplaceWidget } from 'vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget';
import { IThemeService } from 'vs/platform/theme/common/themeService';
export class NotebookFindWidget extends SimpleFindReplaceWidget {
protected _findWidgetFocused: IContextKey<boolean>;
......@@ -26,9 +27,11 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget {
constructor(
private readonly _notebookEditor: INotebookEditor,
@IContextViewService contextViewService: IContextViewService,
@IContextKeyService contextKeyService: IContextKeyService
@IContextKeyService contextKeyService: IContextKeyService,
@IThemeService themeService: IThemeService,
) {
super(contextViewService, contextKeyService);
super(contextViewService, contextKeyService, themeService);
this._findWidgetFocused = KEYBINDING_CONTEXT_NOTEBOOK_FIND_WIDGET_FOCUSED.bindTo(contextKeyService);
this._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e)));
}
......@@ -95,12 +98,19 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget {
const cell = this._findMatches[nextIndex.index].cell;
const match = this._findMatches[nextIndex.index].matches[nextIndex.remainder];
return this._notebookEditor.viewModel!.replaceOne(cell, match.range, this.replaceValue);
this._progressBar.infinite().show();
this._notebookEditor.viewModel!.replaceOne(cell, match.range, this.replaceValue).then(() => {
this._progressBar.stop();
});
}
protected replaceAll() {
return this._notebookEditor.viewModel!.replaceAll(this._findMatches, this.replaceValue);
this._progressBar.infinite().show();
this._notebookEditor.viewModel!.replaceAll(this._findMatches, this.replaceValue).then(() => {
this._progressBar.stop();
});
}
private revealCellRange(cellIndex: number, matchIndex: number) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册