From d172b00b064cf11d35386a2f7cc9e5878e8c6218 Mon Sep 17 00:00:00 2001 From: Andrew Hall Date: Wed, 8 Jun 2022 14:13:39 -0700 Subject: [PATCH 1/2] Use session options for all checkboxes directly --- .../UI/Adornment/RenameFlyoutViewModel.cs | 56 +++++-------------- 1 file changed, 15 insertions(+), 41 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs b/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs index 91b9e5d33d184..6a966923d7ac3 100644 --- a/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs +++ b/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs @@ -28,12 +28,6 @@ public RenameFlyoutViewModel(InlineRenameSession session) _session = session; _session.ReplacementTextChanged += OnReplacementTextChanged; - _previewChangesFlag = _session.PreviewChanges; - _renameFileFlag = _session.Options.RenameFile; - _renameInStringsFlag = _session.Options.RenameInStrings; - _renameInCommentsFlag = _session.Options.RenameInComments; - _renameOverloadsFlag = _session.Options.RenameOverloads; - RegisterOleComponent(); } @@ -60,73 +54,53 @@ public string IdentifierText _ => EditorFeaturesResources.Rename_symbols_file }; - private bool _renameInCommentsFlag; public bool RenameInCommentsFlag { - get => _renameInCommentsFlag; + get => _session.Options.RenameInComments; set { - if (Set(ref _renameInCommentsFlag, value)) - { - _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInComments), value); - _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInComments = value }); - } + _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInComments), value); + _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInComments = value }); } } - private bool _renameInStringsFlag; public bool RenameInStringsFlag { - get => _renameInStringsFlag; + get => _session.Options.RenameInStrings; set { - if (Set(ref _renameInStringsFlag, value)) - { - _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInStrings), value); - _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInStrings = value }); - } + _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInStrings), value); + _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInStrings = value }); } } - private bool _renameFileFlag; public bool RenameFileFlag { - get => _renameFileFlag; + get => _session.Options.RenameFile; set { - if (Set(ref _renameFileFlag, value)) - { - _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameFile), value); - _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameFile = value }); - } + _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameFile), value); + _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameFile = value }); } } - private bool _previewChangesFlag; public bool PreviewChangesFlag { - get => _previewChangesFlag; + get => _session.PreviewChanges; set { - if (Set(ref _previewChangesFlag, value)) - { - _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.PreviewChanges), value); - _session.SetPreviewChanges(value); - } + _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.PreviewChanges), value); + _session.SetPreviewChanges(value); } } - private bool _renameOverloadsFlag; public bool RenameOverloadsFlag { - get => _renameOverloadsFlag; + get => _session.Options.RenameOverloads; set { - if (Set(ref _renameOverloadsFlag, value)) - { - _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameOverloads), value); - _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameOverloads = value }); - } + _session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameOverloads), value); + _session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameOverloads = value }); } } From 7228621ce57421c5feb78f99e39ba9b1d18dfa43 Mon Sep 17 00:00:00 2001 From: Andrew Hall Date: Wed, 8 Jun 2022 14:41:28 -0700 Subject: [PATCH 2/2] Mirror replacement text valid changes from dashboard --- .../UI/Adornment/RenameFlyoutViewModel.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs b/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs index 6a966923d7ac3..4a43312758b72 100644 --- a/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs +++ b/src/EditorFeatures/Core.Wpf/InlineRename/UI/Adornment/RenameFlyoutViewModel.cs @@ -21,13 +21,15 @@ internal class RenameFlyoutViewModel : INotifyPropertyChanged, IDisposable private readonly InlineRenameSession _session; private OleComponent? _oleComponent; private bool _disposedValue; + private bool _isReplacementTextValid = true; public event PropertyChangedEventHandler? PropertyChanged; public RenameFlyoutViewModel(InlineRenameSession session) { _session = session; _session.ReplacementTextChanged += OnReplacementTextChanged; - + _session.ReplacementsComputed += OnReplacementsComputed; + ComputeRenameFile(); RegisterOleComponent(); } @@ -44,7 +46,7 @@ public string IdentifierText } } - public bool AllowFileRename => _session.FileRenameInfo == InlineRenameFileRenameInfo.Allowed; + public bool AllowFileRename => _session.FileRenameInfo == InlineRenameFileRenameInfo.Allowed && _isReplacementTextValid; public bool ShowFileRename => _session.FileRenameInfo != InlineRenameFileRenameInfo.NotAllowed; public string FileRenameString => _session.FileRenameInfo switch @@ -212,6 +214,7 @@ protected virtual void Dispose(bool disposing) if (disposing) { _session.ReplacementTextChanged -= OnReplacementTextChanged; + _session.ReplacementsComputed -= OnReplacementsComputed; UnregisterOleComponent(); } @@ -220,11 +223,26 @@ protected virtual void Dispose(bool disposing) } } + private void ComputeRenameFile() + { + // If replacementText is invalid, we won't rename the file. + RenameFileFlag = _isReplacementTextValid && AllowFileRename && _session.Options.RenameFile; + } + private void OnReplacementTextChanged(object sender, EventArgs e) { NotifyPropertyChanged(nameof(IdentifierText)); } + private void OnReplacementsComputed(object sender, IInlineRenameReplacementInfo result) + { + if (Set(ref _isReplacementTextValid, result.ReplacementTextValid, "IsReplacementTextValid")) + { + ComputeRenameFile(); + NotifyPropertyChanged(nameof(AllowFileRename)); + } + } + private void NotifyPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));