提交 c7eff5b7 编写于 作者: R rebornix

progress bar for find and replace

上级 5f4f23f8
...@@ -40,6 +40,22 @@ ...@@ -40,6 +40,22 @@
margin: 0 0 0 17px; 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 { .monaco-workbench .simple-fr-find-part-wrapper .monaco-findInput {
width: 224px; width: 224px;
} }
......
...@@ -16,9 +16,11 @@ import { SimpleButton } from 'vs/editor/contrib/find/findWidget'; ...@@ -16,9 +16,11 @@ import { SimpleButton } from 'vs/editor/contrib/find/findWidget';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; 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 { 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 { ContextScopedFindInput, ContextScopedReplaceInput } from 'vs/platform/browser/contextScopedHistoryWidget';
import { ReplaceInput, IReplaceInputStyles } from 'vs/base/browser/ui/findinput/replaceInput'; 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_LABEL = nls.localize('label.find', "Find");
const NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', "Find"); const NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', "Find");
...@@ -53,9 +55,13 @@ export abstract class SimpleFindReplaceWidget extends Widget { ...@@ -53,9 +55,13 @@ export abstract class SimpleFindReplaceWidget extends Widget {
private _isReplaceVisible: boolean = false; private _isReplaceVisible: boolean = false;
private foundMatch: boolean = false; private foundMatch: boolean = false;
protected _progressBar!: ProgressBar;
constructor( constructor(
@IContextViewService private readonly _contextViewService: IContextViewService, @IContextViewService private readonly _contextViewService: IContextViewService,
@IContextKeyService contextKeyService: IContextKeyService, @IContextKeyService contextKeyService: IContextKeyService,
@IThemeService private readonly _themeService: IThemeService,
private readonly _state: FindReplaceState = new FindReplaceState(), private readonly _state: FindReplaceState = new FindReplaceState(),
showOptionButtons?: boolean showOptionButtons?: boolean
) { ) {
...@@ -65,6 +71,11 @@ export abstract class SimpleFindReplaceWidget extends Widget { ...@@ -65,6 +71,11 @@ export abstract class SimpleFindReplaceWidget extends Widget {
this._domNode.classList.add('simple-fr-find-part-wrapper'); this._domNode.classList.add('simple-fr-find-part-wrapper');
this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e))); 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 // Toggle replace button
this._toggleReplaceBtn = this._register(new SimpleButton({ this._toggleReplaceBtn = this._register(new SimpleButton({
label: NLS_TOGGLE_REPLACE_MODE_BTN_LABEL, label: NLS_TOGGLE_REPLACE_MODE_BTN_LABEL,
......
...@@ -14,6 +14,7 @@ import { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer' ...@@ -14,6 +14,7 @@ import { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer'
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes'; import { KeyCode } from 'vs/base/common/keyCodes';
import { SimpleFindReplaceWidget } from 'vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget'; import { SimpleFindReplaceWidget } from 'vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget';
import { IThemeService } from 'vs/platform/theme/common/themeService';
export class NotebookFindWidget extends SimpleFindReplaceWidget { export class NotebookFindWidget extends SimpleFindReplaceWidget {
protected _findWidgetFocused: IContextKey<boolean>; protected _findWidgetFocused: IContextKey<boolean>;
...@@ -26,9 +27,11 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget { ...@@ -26,9 +27,11 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget {
constructor( constructor(
private readonly _notebookEditor: INotebookEditor, private readonly _notebookEditor: INotebookEditor,
@IContextViewService contextViewService: IContextViewService, @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._findWidgetFocused = KEYBINDING_CONTEXT_NOTEBOOK_FIND_WIDGET_FOCUSED.bindTo(contextKeyService);
this._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e))); this._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e)));
} }
...@@ -95,12 +98,19 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget { ...@@ -95,12 +98,19 @@ export class NotebookFindWidget extends SimpleFindReplaceWidget {
const cell = this._findMatches[nextIndex.index].cell; const cell = this._findMatches[nextIndex.index].cell;
const match = this._findMatches[nextIndex.index].matches[nextIndex.remainder]; 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() { 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) { private revealCellRange(cellIndex: number, matchIndex: number) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册