Skip to content

Commit c66ac4c

Browse files
committed
Set selections via the ISelectionService in Core and Parsing
1 parent d10ddfe commit c66ac4c

File tree

11 files changed

+66
-83
lines changed

11 files changed

+66
-83
lines changed

Rubberduck.Core/Navigation/RegexSearchReplace/RegexSearchReplace.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,21 @@
88
using Rubberduck.VBEditor;
99
using Rubberduck.VBEditor.SafeComWrappers;
1010
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
11+
using Rubberduck.VBEditor.Utility;
1112

1213
namespace Rubberduck.Navigation.RegexSearchReplace
1314
{
1415
public class RegexSearchReplace : IRegexSearchReplace
1516
{
1617
private readonly IVBE _vbe;
1718
private readonly IParseCoordinator _parser;
19+
private readonly ISelectionService _selectionService;
1820

19-
public RegexSearchReplace(IVBE vbe, IParseCoordinator parser)
21+
public RegexSearchReplace(IVBE vbe, IParseCoordinator parser, ISelectionService selectionService)
2022
{
2123
_vbe = vbe;
2224
_parser = parser;
25+
_selectionService = selectionService;
2326
_search = new Dictionary<RegexSearchReplaceScope, Func<string, IEnumerable<RegexSearchResult>>>
2427
{
2528
{ RegexSearchReplaceScope.Selection, SearchSelection},
@@ -89,11 +92,9 @@ private IEnumerable<RegexSearchResult> GetResultsFromModule(ICodeModule module,
8992

9093
private void SetSelection(RegexSearchResult item)
9194
{
92-
var module = item.Module;
93-
using (var codePane = module.CodePane)
94-
{
95-
codePane.Selection = item.Selection;
96-
}
95+
var module = item.Module.QualifiedModuleName;
96+
_selectionService.TrySetSelection(module, item.Selection);
97+
_selectionService.TryActivate(module);
9798
}
9899

99100
private List<RegexSearchResult> SearchSelection(string searchPattern)

Rubberduck.Core/UI/Command/FindSymbolCommand.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.UI.FindSymbol;
77
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
8+
using Rubberduck.VBEditor.Utility;
89

910
namespace Rubberduck.UI.Command
1011
{
@@ -19,13 +20,13 @@ public class FindSymbolCommand : CommandBase
1920
private readonly DeclarationIconCache _iconCache;
2021
private readonly NavigateCommand _navigateCommand;
2122

22-
public FindSymbolCommand(IVBE vbe, RubberduckParserState state, DeclarationIconCache iconCache) : base(LogManager.GetCurrentClassLogger())
23+
public FindSymbolCommand(IVBE vbe, RubberduckParserState state, ISelectionService selectionService, DeclarationIconCache iconCache) : base(LogManager.GetCurrentClassLogger())
2324
{
2425
_vbe = vbe;
2526
_state = state;
2627
_iconCache = iconCache;
2728

28-
_navigateCommand = new NavigateCommand(_state.ProjectsProvider);
29+
_navigateCommand = new NavigateCommand(selectionService);
2930
}
3031

3132
protected override void OnExecute(object parameter)

Rubberduck.Core/UI/Command/NavigateCommand.cs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
using System.Runtime.InteropServices;
2-
using System.Windows.Input;
32
using NLog;
43
using Rubberduck.Interaction.Navigation;
5-
using Rubberduck.VBEditor.ComManagement;
4+
using Rubberduck.VBEditor.Utility;
65

76
namespace Rubberduck.UI.Command
87
{
@@ -13,12 +12,12 @@ namespace Rubberduck.UI.Command
1312
[ComVisible(false)]
1413
public class NavigateCommand : CommandBase, INavigateCommand
1514
{
16-
private readonly IProjectsProvider _projectsProvider;
15+
private readonly ISelectionService _selectionService;
1716

18-
public NavigateCommand(IProjectsProvider projectsProvider)
17+
public NavigateCommand(ISelectionService selectionService)
1918
: base(LogManager.GetCurrentClassLogger())
2019
{
21-
_projectsProvider = projectsProvider;
20+
_selectionService = selectionService;
2221
}
2322

2423
protected override void OnExecute(object parameter)
@@ -29,19 +28,9 @@ protected override void OnExecute(object parameter)
2928
return;
3029
}
3130

32-
try
33-
{
34-
var component = _projectsProvider.Component(param.QualifiedName);
35-
using (var codeModule = component.CodeModule)
36-
{
37-
using (var codePane = codeModule.CodePane)
38-
{
39-
codePane.Selection = param.Selection;
40-
}
41-
}
42-
}
43-
catch (COMException)
31+
if (_selectionService.TrySetSelection(param.QualifiedName, param.Selection))
4432
{
33+
_selectionService.TryActivate(param.QualifiedName);
4534
}
4635
}
4736
}

Rubberduck.Core/UI/IdentifierReferences/IdentifierReferencesListDockablePresenter.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22
using Rubberduck.Parsing.Symbols;
33
using Rubberduck.VBEditor.ComManagement;
44
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
5+
using Rubberduck.VBEditor.Utility;
56

67
namespace Rubberduck.UI.IdentifierReferences
78
{
89
public class IdentifierReferencesListDockablePresenter : DockableToolwindowPresenter
910
{
10-
private readonly IProjectsProvider _projectsProvider;
11+
private readonly ISelectionService _selectionService;
1112

12-
public IdentifierReferencesListDockablePresenter(IVBE vbe, IAddIn addin, SimpleListControl control, IProjectsProvider projectsProvider, Declaration target)
13+
public IdentifierReferencesListDockablePresenter(IVBE vbe, IAddIn addin, SimpleListControl control, ISelectionService selectionService, Declaration target)
1314
: base(vbe, addin, control, null)
1415
{
15-
_projectsProvider = projectsProvider;
16+
_selectionService = selectionService;
1617

1718
BindTarget(target);
1819
}
@@ -31,13 +32,9 @@ private void BindTarget(Declaration target)
3132

3233
private void OnNavigateIdentifierReference(IdentifierReference reference)
3334
{
34-
var component = _projectsProvider.Component(reference.QualifiedModuleName);
35-
using (var codeModule = component.CodeModule)
35+
if(_selectionService.TrySetSelection(reference.QualifiedModuleName, reference.Selection))
3636
{
37-
using (var codePane = codeModule.CodePane)
38-
{
39-
codePane.Selection = reference.Selection;
40-
}
37+
_selectionService.TryActivate(reference.QualifiedModuleName);
4138
}
4239
}
4340

Rubberduck.Core/UI/IdentifierReferences/ImplementationsListDockablePresenter.cs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
using System.Diagnostics;
33
using System.Linq;
44
using Rubberduck.Parsing.Symbols;
5-
using Rubberduck.VBEditor.ComManagement;
65
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
6+
using Rubberduck.VBEditor.Utility;
77

88
namespace Rubberduck.UI.IdentifierReferences
99
{
1010
public class ImplementationsListDockablePresenter : DockableToolwindowPresenter
1111
{
12-
private readonly IProjectsProvider _projectsProvider;
12+
private readonly ISelectionService _selectionService;
1313

14-
public ImplementationsListDockablePresenter(IVBE vbe, IAddIn addin, IDockableUserControl control, IProjectsProvider projectsProvider, IEnumerable<Declaration> implementations)
14+
public ImplementationsListDockablePresenter(IVBE vbe, IAddIn addin, IDockableUserControl control, ISelectionService selectionService, IEnumerable<Declaration> implementations)
1515
: base(vbe, addin, control, null)
1616
{
17-
_projectsProvider = projectsProvider;
17+
_selectionService = selectionService;
1818

1919
BindTarget(implementations);
2020
}
@@ -33,13 +33,9 @@ private void BindTarget(IEnumerable<Declaration> implementations)
3333

3434
private void OnNavigateImplementation(Declaration implementation)
3535
{
36-
var component = _projectsProvider.Component(implementation.QualifiedName.QualifiedModuleName);
37-
using (var codeModule = component.CodeModule)
36+
if (_selectionService.TrySetSelection(implementation.QualifiedModuleName, implementation.Selection))
3837
{
39-
using (var codePane = codeModule.CodePane)
40-
{
41-
codePane.Selection = implementation.Selection;
42-
}
38+
_selectionService.TryActivate(implementation.QualifiedModuleName);
4339
}
4440
}
4541

Rubberduck.Core/UI/ParserErrors/ParseErrorListItem.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Rubberduck.Parsing.VBA;
2-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
2+
using Rubberduck.VBEditor.Utility;
33

44
namespace Rubberduck.UI.ParserErrors
55
{
@@ -21,9 +21,9 @@ public ParseErrorListItem(ParseErrorEventArgs error)
2121

2222
public string Value => ToString();
2323

24-
public void Navigate(IVBE vbe)
24+
public void Navigate(ISelectionService selectionService)
2525
{
26-
_error.Navigate(vbe);
26+
_error.Navigate(selectionService);
2727
}
2828

2929
public override string ToString()

Rubberduck.Core/UI/ParserErrors/ParserErrorsPresenter.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.UI.IdentifierReferences;
66
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
77
using Rubberduck.Resources;
8+
using Rubberduck.VBEditor.Utility;
89

910
namespace Rubberduck.UI.ParserErrors
1011
{
@@ -17,12 +18,12 @@ public interface IParserErrorsPresenter
1718

1819
public class ParserErrorsPresenter : DockableToolwindowPresenter, IParserErrorsPresenter
1920
{
20-
private readonly IVBE _vbe;
21+
private readonly ISelectionService _selectionService;
2122

22-
public ParserErrorsPresenter(IVBE vbe, IAddIn addin)
23+
public ParserErrorsPresenter(IVBE vbe, IAddIn addin, ISelectionService selectionService)
2324
: base(vbe, addin, new SimpleListControl(RubberduckUI.ParseErrors_Caption), null)
2425
{
25-
_vbe = vbe;
26+
_selectionService = selectionService;
2627
_source = new BindingList<ParseErrorListItem>();
2728
var control = UserControl as SimpleListControl;
2829
Debug.Assert(control != null);
@@ -32,7 +33,7 @@ public ParserErrorsPresenter(IVBE vbe, IAddIn addin)
3233
private void Control_Navigate(object sender, ListItemActionEventArgs e)
3334
{
3435
var selection = (ParseErrorListItem) e.SelectedItem;
35-
selection.Navigate(_vbe);
36+
selection.Navigate(_selectionService);
3637
}
3738

3839
private readonly IBindingList _source;

Rubberduck.Core/UI/ToDoItems/ToDoExplorerViewModel.cs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Rubberduck.Parsing.Symbols;
1616
using Rubberduck.Resources.ToDoExplorer;
1717
using Rubberduck.Interaction.Navigation;
18+
using Rubberduck.VBEditor.Utility;
1819

1920
namespace Rubberduck.UI.ToDoItems
2021
{
@@ -24,13 +25,15 @@ public sealed class ToDoExplorerViewModel : ViewModelBase, INavigateSelection, I
2425
private readonly IGeneralConfigService _configService;
2526
private readonly ISettingsFormFactory _settingsFormFactory;
2627

27-
public ToDoExplorerViewModel(RubberduckParserState state, IGeneralConfigService configService, ISettingsFormFactory settingsFormFactory)
28+
public ToDoExplorerViewModel(RubberduckParserState state, IGeneralConfigService configService, ISettingsFormFactory settingsFormFactory, ISelectionService selectionService)
2829
{
2930
_state = state;
3031
_configService = configService;
3132
_settingsFormFactory = settingsFormFactory;
3233
_state.StateChanged += HandleStateChanged;
3334

35+
_navigateCommand = new Lazy<NavigateCommand>(() => new NavigateCommand(selectionService));
36+
3437
SetMarkerGroupingCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param =>
3538
{
3639
GroupByMarker = (bool)param;
@@ -233,18 +236,8 @@ public CommandBase OpenTodoSettings
233236
}
234237
}
235238

236-
private NavigateCommand _navigateCommand;
237-
public INavigateCommand NavigateCommand
238-
{
239-
get
240-
{
241-
if (_navigateCommand != null)
242-
{
243-
return _navigateCommand;
244-
}
245-
return _navigateCommand = new NavigateCommand(_state.ProjectsProvider);
246-
}
247-
}
239+
private readonly Lazy<NavigateCommand> _navigateCommand;
240+
public INavigateCommand NavigateCommand => _navigateCommand.Value;
248241

249242
private IEnumerable<ToDoItem> GetToDoMarkers(CommentNode comment)
250243
{

Rubberduck.Core/UI/UnitTesting/TestExplorerViewModel.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Rubberduck.UI.UnitTesting.ViewModels;
1616
using Rubberduck.UnitTesting;
1717
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
18+
using Rubberduck.VBEditor.Utility;
1819

1920
namespace Rubberduck.UI.UnitTesting
2021
{
@@ -35,7 +36,8 @@ public TestExplorerViewModel(IVBE vbe,
3536
IGeneralConfigService configService,
3637
ISettingsFormFactory settingsFormFactory,
3738
IMessageBox messageBox,
38-
ReparseCommand reparseCommand)
39+
ReparseCommand reparseCommand,
40+
ISelectionService selectionService)
3941
{
4042
_vbe = vbe;
4143
_state = state;
@@ -46,7 +48,7 @@ public TestExplorerViewModel(IVBE vbe,
4648
_settingsFormFactory = settingsFormFactory;
4749
_messageBox = messageBox;
4850

49-
_navigateCommand = new NavigateCommand(_state.ProjectsProvider);
51+
_navigateCommand = new NavigateCommand(selectionService);
5052

5153
RunSelectedTestCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteSelectedTestCommand, CanExecuteSelectedTestCommand);
5254
RunSelectedCategoryTestsCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteRunSelectedCategoryTestsCommand, CanExecuteRunSelectedCategoryTestsCommand);

Rubberduck.Parsing/VBA/ParseErrorEventArgs.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using Rubberduck.Parsing.VBA.Parsing.ParsingExceptions;
33
using Rubberduck.VBEditor;
4-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
4+
using Rubberduck.VBEditor.Utility;
55

66
namespace Rubberduck.Parsing.VBA
77
{
@@ -20,20 +20,12 @@ public ParseErrorEventArgs(SyntaxErrorException exception, QualifiedModuleName m
2020
public string ComponentName => _moduleName.ComponentName;
2121
public string ProjectName => _moduleName.ProjectName;
2222

23-
public void Navigate(IVBE vbe)
23+
public void Navigate(ISelectionService selectionService)
2424
{
2525
var selection = new Selection(Exception.LineNumber, Exception.Position, Exception.LineNumber, Exception.Position + Exception.OffendingSymbol.Text.Length - 1);
26-
27-
if (!_moduleName.TryGetComponent(vbe, out var component))
26+
if (selectionService.TrySetSelection(_moduleName, selection))
2827
{
29-
return;
30-
}
31-
32-
using (component)
33-
using (var module = component.CodeModule)
34-
using (var pane = module.CodePane)
35-
{
36-
pane.Selection = selection;
28+
selectionService.TryActivate(_moduleName);
3729
}
3830
}
3931
}

0 commit comments

Comments
 (0)