Skip to content

Commit

Permalink
Use inline rename session options for all checkboxes directly (#61785)
Browse files Browse the repository at this point in the history
Fixes #60294

The flyout view model isn't recreated, so if the session options change in some way (such as being reset) it won't get updated between showing/hiding. This fixes so there's no intermediate variables and binds directly to the session options.
  • Loading branch information
ryzngard authored Jun 14, 2022
1 parent b7b8bde commit 4b4dcaa
Showing 1 changed file with 35 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +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;

_previewChangesFlag = _session.PreviewChanges;
_renameFileFlag = _session.Options.RenameFile;
_renameInStringsFlag = _session.Options.RenameInStrings;
_renameInCommentsFlag = _session.Options.RenameInComments;
_renameOverloadsFlag = _session.Options.RenameOverloads;

_session.ReplacementsComputed += OnReplacementsComputed;
ComputeRenameFile();
RegisterOleComponent();
}

Expand All @@ -50,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
Expand All @@ -60,73 +56,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 });
}
}

Expand Down Expand Up @@ -238,6 +214,7 @@ protected virtual void Dispose(bool disposing)
if (disposing)
{
_session.ReplacementTextChanged -= OnReplacementTextChanged;
_session.ReplacementsComputed -= OnReplacementsComputed;

UnregisterOleComponent();
}
Expand All @@ -246,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));

Expand Down

0 comments on commit 4b4dcaa

Please sign in to comment.