From c7eff5b70e04b7d71034b538c6f0e197cb9601f3 Mon Sep 17 00:00:00 2001 From: rebornix Date: Mon, 16 Mar 2020 17:29:38 -0700 Subject: [PATCH] progress bar for find and replace --- .../browser/find/simpleFindReplaceWidget.css | 16 ++++++++++++++++ .../browser/find/simpleFindReplaceWidget.ts | 13 ++++++++++++- .../browser/contrib/notebookFindWidget.ts | 18 ++++++++++++++---- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.css b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.css index a6448cec791..d726db9d7bd 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.css +++ b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.css @@ -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; } diff --git a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts index fafb8102c1d..1377d4d5bd0 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/find/simpleFindReplaceWidget.ts @@ -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, diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/notebookFindWidget.ts b/src/vs/workbench/contrib/notebook/browser/contrib/notebookFindWidget.ts index d22b8c73cf6..cb722fe2b14 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/notebookFindWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/notebookFindWidget.ts @@ -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; @@ -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) { -- GitLab