Skip to content

Commit f29c94b

Browse files
committed
Commit refactored sinks.
1 parent bf56525 commit f29c94b

File tree

4 files changed

+341
-135
lines changed

4 files changed

+341
-135
lines changed

RetailCoder.VBE/App.cs

Lines changed: 7 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -3,63 +3,42 @@
33
using Microsoft.Vbe.Interop;
44
using NLog;
55
using Rubberduck.Common;
6-
using Rubberduck.Common.Dispatch;
76
using Rubberduck.Parsing;
87
using Rubberduck.Parsing.Symbols;
98
using Rubberduck.Parsing.VBA;
109
using Rubberduck.Settings;
1110
using Rubberduck.UI;
1211
using Rubberduck.UI.Command.MenuItems;
1312
using System;
14-
using System.Collections.Generic;
15-
using System.Diagnostics;
1613
using System.Globalization;
17-
using System.Linq;
18-
using System.Runtime.InteropServices.ComTypes;
1914
using System.Threading.Tasks;
2015
using System.Windows.Forms;
21-
using Rubberduck.UI.SourceControl;
22-
using Rubberduck.VBEditor.Extensions;
2316

2417
namespace Rubberduck
2518
{
2619
public sealed class App : IDisposable
2720
{
28-
private const string FILE_TARGET_NAME = "file";
2921
private readonly VBE _vbe;
3022
private readonly IMessageBox _messageBox;
31-
private IRubberduckParser _parser;
23+
private readonly IRubberduckParser _parser;
3224
private AutoSave.AutoSave _autoSave;
3325
private IGeneralConfigService _configService;
3426
private readonly IAppMenu _appMenus;
3527
private RubberduckCommandBar _stateBar;
3628
private IRubberduckHooks _hooks;
37-
private bool _handleSinkEvents = true;
38-
private readonly BranchesViewViewModel _branchesVM;
39-
private readonly SourceControlViewViewModel _sourceControlPanelVM;
4029
private readonly UI.Settings.Settings _settings;
4130

4231
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
43-
44-
private VBProjectsEventsSink _sink;
32+
4533
private Configuration _config;
4634

47-
private readonly IConnectionPoint _projectsEventsConnectionPoint;
48-
private readonly int _projectsEventsCookie;
49-
50-
private readonly IDictionary<string, Tuple<IConnectionPoint, int>> _componentsEventsConnectionPoints =
51-
new Dictionary<string, Tuple<IConnectionPoint, int>>();
52-
private readonly IDictionary<string, Tuple<IConnectionPoint, int>> _referencesEventsConnectionPoints =
53-
new Dictionary<string, Tuple<IConnectionPoint, int>>();
54-
5535
public App(VBE vbe, IMessageBox messageBox,
5636
UI.Settings.Settings settings,
5737
IRubberduckParser parser,
5838
IGeneralConfigService configService,
5939
IAppMenu appMenus,
6040
RubberduckCommandBar stateBar,
61-
IRubberduckHooks hooks,
62-
SourceControlDockablePresenter sourceControlPresenter)
41+
IRubberduckHooks hooks)
6342
{
6443
_vbe = vbe;
6544
_messageBox = messageBox;
@@ -71,37 +50,15 @@ public App(VBE vbe, IMessageBox messageBox,
7150
_stateBar = stateBar;
7251
_hooks = hooks;
7352

74-
var sourceControlPanel = (SourceControlPanel) sourceControlPresenter.Window();
75-
_sourceControlPanelVM = (SourceControlViewViewModel) sourceControlPanel.ViewModel;
76-
_branchesVM = (BranchesViewViewModel) _sourceControlPanelVM.TabItems.Single(t => t.ViewModel.Tab == SourceControlTab.Branches).ViewModel;
77-
78-
_sourceControlPanelVM.OpenRepoStarted += DisableSinkEventHandlers;
79-
_sourceControlPanelVM.OpenRepoCompleted += EnableSinkEventHandlersAndUpdateCache;
80-
81-
_branchesVM.LoadingComponentsStarted += DisableSinkEventHandlers;
82-
_branchesVM.LoadingComponentsCompleted += EnableSinkEventHandlersAndUpdateCache;
83-
8453
_hooks.MessageReceived += _hooks_MessageReceived;
8554
_configService.SettingsChanged += _configService_SettingsChanged;
8655
_parser.State.StateChanged += Parser_StateChanged;
8756
_parser.State.StatusMessageUpdate += State_StatusMessageUpdate;
8857
_stateBar.Refresh += _stateBar_Refresh;
89-
90-
_sink = new VBProjectsEventsSink();
91-
var connectionPointContainer = (IConnectionPointContainer)_vbe.VBProjects;
92-
var interfaceId = typeof(_dispVBProjectsEvents).GUID;
93-
connectionPointContainer.FindConnectionPoint(ref interfaceId, out _projectsEventsConnectionPoint);
94-
95-
_sink.ProjectAdded += sink_ProjectAdded;
96-
_sink.ProjectRemoved += sink_ProjectRemoved;
97-
_sink.ProjectActivated += sink_ProjectActivated;
98-
_sink.ProjectRenamed += sink_ProjectRenamed;
99-
100-
_projectsEventsConnectionPoint.Advise(_sink, out _projectsEventsCookie);
10158
UiDispatcher.Initialize();
10259
}
10360

104-
private void EnableSinkEventHandlersAndUpdateCache(object sender, EventArgs e)
61+
/*private void EnableSinkEventHandlersAndUpdateCache(object sender, EventArgs e)
10562
{
10663
_handleSinkEvents = true;
10764
@@ -115,7 +72,7 @@ private void EnableSinkEventHandlersAndUpdateCache(object sender, EventArgs e)
11572
private void DisableSinkEventHandlers(object sender, EventArgs e)
11673
{
11774
_handleSinkEvents = false;
118-
}
75+
}*/
11976

12077
private void State_StatusMessageUpdate(object sender, RubberduckStatusMessageEventArgs e)
12178
{
@@ -216,7 +173,7 @@ public void Shutdown()
216173
}
217174
}
218175

219-
#region sink handlers. todo: move to another class
176+
/*#region sink handlers.
220177
async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
221178
{
222179
if (!_handleSinkEvents || !_vbe.IsInDesignMode()) { return; }
@@ -253,12 +210,6 @@ async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
253210
}
254211
}
255212
256-
private readonly IDictionary<string, VBComponentsEventsSink> _componentsEventsSinks =
257-
new Dictionary<string, VBComponentsEventsSink>();
258-
259-
private readonly IDictionary<string, ReferencesEventsSink> _referencesEventsSinks =
260-
new Dictionary<string, ReferencesEventsSink>();
261-
262213
async void sink_ProjectAdded(object sender, DispatcherEventArgs<VBProject> e)
263214
{
264215
if (!_handleSinkEvents || !_vbe.IsInDesignMode()) { return; }
@@ -285,37 +236,6 @@ async void sink_ProjectAdded(object sender, DispatcherEventArgs<VBProject> e)
285236
_parser.State.OnParseRequested(sender);
286237
}
287238
288-
private void RegisterComponentsEventSink(VBComponents components, string projectId)
289-
{
290-
if (_componentsEventsSinks.ContainsKey(projectId))
291-
{
292-
// already registered - this is caused by the initial load+rename of a project in the VBE
293-
Logger.Debug("Components sink already registered.");
294-
return;
295-
}
296-
297-
var connectionPointContainer = (IConnectionPointContainer)components;
298-
var interfaceId = typeof(_dispVBComponentsEvents).GUID;
299-
300-
IConnectionPoint connectionPoint;
301-
connectionPointContainer.FindConnectionPoint(ref interfaceId, out connectionPoint);
302-
303-
var componentsSink = new VBComponentsEventsSink();
304-
componentsSink.ComponentActivated += sink_ComponentActivated;
305-
componentsSink.ComponentAdded += sink_ComponentAdded;
306-
componentsSink.ComponentReloaded += sink_ComponentReloaded;
307-
componentsSink.ComponentRemoved += sink_ComponentRemoved;
308-
componentsSink.ComponentRenamed += sink_ComponentRenamed;
309-
componentsSink.ComponentSelected += sink_ComponentSelected;
310-
_componentsEventsSinks.Add(projectId, componentsSink);
311-
312-
int cookie;
313-
connectionPoint.Advise(componentsSink, out cookie);
314-
315-
_componentsEventsConnectionPoints.Add(projectId, Tuple.Create(connectionPoint, cookie));
316-
Logger.Debug("Components sink registered and advising.");
317-
}
318-
319239
async void sink_ComponentSelected(object sender, DispatcherEventArgs<VBComponent> e)
320240
{
321241
if (!_handleSinkEvents || !_vbe.IsInDesignMode()) { return; }
@@ -324,8 +244,6 @@ async void sink_ComponentSelected(object sender, DispatcherEventArgs<VBComponent
324244
{
325245
return;
326246
}
327-
328-
// todo: keep Code Explorer in sync with Project Explorer
329247
}
330248
331249
async void sink_ComponentRenamed(object sender, DispatcherRenamedEventArgs<VBComponent> e)
@@ -473,7 +391,7 @@ async void sink_ProjectActivated(object sender, DispatcherEventArgs<VBProject> e
473391
474392
// todo: keep Code Explorer in sync with Project Explorer
475393
}
476-
#endregion
394+
#endregion*/
477395

478396
private void _stateBar_Refresh(object sender, EventArgs e)
479397
{
@@ -509,28 +427,13 @@ private void LoadConfig()
509427
}
510428

511429
private bool _disposed;
512-
513430
public void Dispose()
514431
{
515432
if (_disposed)
516433
{
517434
return;
518435
}
519436

520-
if (_sourceControlPanelVM != null)
521-
{
522-
_sourceControlPanelVM.OpenRepoStarted -= DisableSinkEventHandlers;
523-
_sourceControlPanelVM.OpenRepoCompleted -= EnableSinkEventHandlersAndUpdateCache;
524-
}
525-
526-
if (_branchesVM != null)
527-
{
528-
_branchesVM.LoadingComponentsStarted -= DisableSinkEventHandlers;
529-
_branchesVM.LoadingComponentsCompleted -= EnableSinkEventHandlersAndUpdateCache;
530-
}
531-
532-
_handleSinkEvents = false;
533-
534437
if (_parser != null && _parser.State != null)
535438
{
536439
_parser.State.StateChanged -= Parser_StateChanged;
@@ -564,41 +467,12 @@ public void Dispose()
564467
_stateBar = null;
565468
}
566469

567-
if (_sink != null)
568-
{
569-
_sink.ProjectAdded -= sink_ProjectAdded;
570-
_sink.ProjectRemoved -= sink_ProjectRemoved;
571-
_sink.ProjectActivated -= sink_ProjectActivated;
572-
_sink.ProjectRenamed -= sink_ProjectRenamed;
573-
_sink = null;
574-
}
575-
576-
foreach (var item in _componentsEventsSinks)
577-
{
578-
item.Value.ComponentActivated -= sink_ComponentActivated;
579-
item.Value.ComponentAdded -= sink_ComponentAdded;
580-
item.Value.ComponentReloaded -= sink_ComponentReloaded;
581-
item.Value.ComponentRemoved -= sink_ComponentRemoved;
582-
item.Value.ComponentRenamed -= sink_ComponentRenamed;
583-
item.Value.ComponentSelected -= sink_ComponentSelected;
584-
}
585-
586470
if (_autoSave != null)
587471
{
588472
_autoSave.Dispose();
589473
_autoSave = null;
590474
}
591475

592-
_projectsEventsConnectionPoint.Unadvise(_projectsEventsCookie);
593-
foreach (var item in _componentsEventsConnectionPoints)
594-
{
595-
item.Value.Item1.Unadvise(item.Value.Item2);
596-
}
597-
foreach (var item in _referencesEventsConnectionPoints)
598-
{
599-
item.Value.Item1.Unadvise(item.Value.Item2);
600-
}
601-
602476
UiDispatcher.Shutdown();
603477

604478
_disposed = true;

RetailCoder.VBE/Root/RubberduckModule.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Reflection;
5-
using System.Windows.Input;
65
using Microsoft.Office.Core;
76
using Microsoft.Vbe.Interop;
87
using Ninject;
@@ -30,7 +29,6 @@
3029
using Rubberduck.UI.UnitTesting;
3130
using Rubberduck.UnitTesting;
3231
using Rubberduck.VBEditor.VBEHost;
33-
using NLog;
3432
using Rubberduck.Parsing.Preprocessing;
3533
using System.Globalization;
3634
using Ninject.Extensions.Interception.Infrastructure.Language;
@@ -60,6 +58,7 @@ public override void Load()
6058
// bind VBE and AddIn dependencies to host-provided instances.
6159
Bind<VBE>().ToConstant(_vbe);
6260
Bind<AddIn>().ToConstant(_addin);
61+
Bind<Sinks>().ToSelf().InSingletonScope();
6362
Bind<App>().ToSelf().InSingletonScope();
6463
Bind<RubberduckParserState>().ToSelf().InSingletonScope();
6564
Bind<GitProvider>().ToSelf().InSingletonScope();

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@
404404
<Compile Include="Settings\RubberduckHotkey.cs" />
405405
<Compile Include="Settings\ToDoListConfigProvider.cs" />
406406
<Compile Include="Settings\UnitTestConfigProvider.cs" />
407+
<Compile Include="Sinks.cs" />
407408
<Compile Include="UI\About\AboutControl.xaml.cs">
408409
<DependentUpon>AboutControl.xaml</DependentUpon>
409410
</Compile>

0 commit comments

Comments
 (0)