7
7
using Rubberduck . Parsing . Symbols ;
8
8
using Rubberduck . Parsing . VBA ;
9
9
using Rubberduck . Settings ;
10
- using Rubberduck . SmartIndenter ;
11
10
using Rubberduck . UI ;
12
11
using Rubberduck . UI . Command . MenuItems ;
13
12
using System ;
18
17
using System . Runtime . InteropServices . ComTypes ;
19
18
using System . Threading . Tasks ;
20
19
using System . Windows . Forms ;
20
+ using Rubberduck . UI . SourceControl ;
21
21
22
22
namespace Rubberduck
23
23
{
@@ -29,10 +29,11 @@ public sealed class App : IDisposable
29
29
private readonly IRubberduckParser _parser ;
30
30
private AutoSave . AutoSave _autoSave ;
31
31
private IGeneralConfigService _configService ;
32
- private IAppMenu _appMenus ;
32
+ private readonly IAppMenu _appMenus ;
33
33
private RubberduckCommandBar _stateBar ;
34
- private readonly IIndenter _indenter ;
35
34
private IRubberduckHooks _hooks ;
35
+ private bool _handleSinkEvents = true ;
36
+ private readonly BranchesViewViewModel _branchesVM ;
36
37
37
38
private readonly Logger _logger ;
38
39
@@ -52,8 +53,8 @@ public App(VBE vbe, IMessageBox messageBox,
52
53
IGeneralConfigService configService ,
53
54
IAppMenu appMenus ,
54
55
RubberduckCommandBar stateBar ,
55
- IIndenter indenter ,
56
- IRubberduckHooks hooks )
56
+ IRubberduckHooks hooks ,
57
+ SourceControlDockablePresenter sourceControlPresenter )
57
58
{
58
59
_vbe = vbe ;
59
60
_messageBox = messageBox ;
@@ -62,10 +63,16 @@ public App(VBE vbe, IMessageBox messageBox,
62
63
_autoSave = new AutoSave . AutoSave ( _vbe , _configService ) ;
63
64
_appMenus = appMenus ;
64
65
_stateBar = stateBar ;
65
- _indenter = indenter ;
66
66
_hooks = hooks ;
67
67
_logger = LogManager . GetCurrentClassLogger ( ) ;
68
68
69
+ var sourceControlPanel = ( SourceControlPanel ) sourceControlPresenter . Window ( ) ;
70
+ var panelVM = ( SourceControlViewViewModel ) sourceControlPanel . ViewModel ;
71
+ _branchesVM = ( BranchesViewViewModel ) panelVM . TabItems . Single ( t => t . ViewModel . Tab == SourceControlTab . Branches ) . ViewModel ;
72
+
73
+ _branchesVM . MergeStarted += _branchesVM_MergeStarted ;
74
+ _branchesVM . MergeCompleted += _branchesVM_MergeCompleted ;
75
+
69
76
_hooks . MessageReceived += _hooks_MessageReceived ;
70
77
_configService . SettingsChanged += _configService_SettingsChanged ;
71
78
_configService . LanguageChanged += ConfigServiceLanguageChanged ;
@@ -87,6 +94,22 @@ public App(VBE vbe, IMessageBox messageBox,
87
94
UiDispatcher . Initialize ( ) ;
88
95
}
89
96
97
+ private void _branchesVM_MergeCompleted ( object sender , EventArgs e )
98
+ {
99
+ _handleSinkEvents = true ;
100
+
101
+ // update cache
102
+ _parser . State . RemoveProject ( _vbe . ActiveVBProject . HelpFile ) ;
103
+ _parser . State . AddProject ( _vbe . ActiveVBProject ) ;
104
+
105
+ _parser . State . OnParseRequested ( this ) ;
106
+ }
107
+
108
+ private void _branchesVM_MergeStarted ( object sender , EventArgs e )
109
+ {
110
+ _handleSinkEvents = false ;
111
+ }
112
+
90
113
private void State_StatusMessageUpdate ( object sender , RubberduckStatusMessageEventArgs e )
91
114
{
92
115
var message = e . Message ;
@@ -168,6 +191,8 @@ public void Shutdown()
168
191
#region sink handlers. todo: move to another class
169
192
async void sink_ProjectRemoved ( object sender , DispatcherEventArgs < VBProject > e )
170
193
{
194
+ if ( ! _handleSinkEvents ) { return ; }
195
+
171
196
if ( e . Item . Protection == vbext_ProjectProtection . vbext_pp_locked )
172
197
{
173
198
_logger . Debug ( "Locked project '{0}' was removed." , e . Item . Name ) ;
@@ -205,6 +230,8 @@ async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
205
230
206
231
async void sink_ProjectAdded ( object sender , DispatcherEventArgs < VBProject > e )
207
232
{
233
+ if ( ! _handleSinkEvents ) { return ; }
234
+
208
235
_logger . Debug ( "Project '{0}' was added." , e . Item . Name ) ;
209
236
if ( e . Item . Protection == vbext_ProjectProtection . vbext_pp_locked )
210
237
{
@@ -260,6 +287,8 @@ private void RegisterComponentsEventSink(VBComponents components, string project
260
287
261
288
async void sink_ComponentSelected ( object sender , DispatcherEventArgs < VBComponent > e )
262
289
{
290
+ if ( ! _handleSinkEvents ) { return ; }
291
+
263
292
if ( ! _parser . State . AllDeclarations . Any ( ) )
264
293
{
265
294
return ;
@@ -271,6 +300,8 @@ async void sink_ComponentSelected(object sender, DispatcherEventArgs<VBComponent
271
300
272
301
async void sink_ComponentRenamed ( object sender , DispatcherRenamedEventArgs < VBComponent > e )
273
302
{
303
+ if ( ! _handleSinkEvents ) { return ; }
304
+
274
305
if ( ! _parser . State . AllDeclarations . Any ( ) )
275
306
{
276
307
return ;
@@ -283,6 +314,8 @@ async void sink_ComponentRenamed(object sender, DispatcherRenamedEventArgs<VBCom
283
314
284
315
async void sink_ComponentRemoved ( object sender , DispatcherEventArgs < VBComponent > e )
285
316
{
317
+ if ( ! _handleSinkEvents ) { return ; }
318
+
286
319
if ( ! _parser . State . AllDeclarations . Any ( ) )
287
320
{
288
321
return ;
@@ -294,6 +327,8 @@ async void sink_ComponentRemoved(object sender, DispatcherEventArgs<VBComponent>
294
327
295
328
async void sink_ComponentReloaded ( object sender , DispatcherEventArgs < VBComponent > e )
296
329
{
330
+ if ( ! _handleSinkEvents ) { return ; }
331
+
297
332
if ( ! _parser . State . AllDeclarations . Any ( ) )
298
333
{
299
334
return ;
@@ -305,6 +340,8 @@ async void sink_ComponentReloaded(object sender, DispatcherEventArgs<VBComponent
305
340
306
341
async void sink_ComponentAdded ( object sender , DispatcherEventArgs < VBComponent > e )
307
342
{
343
+ if ( ! _handleSinkEvents ) { return ; }
344
+
308
345
if ( ! _parser . State . AllDeclarations . Any ( ) )
309
346
{
310
347
return ;
@@ -316,6 +353,8 @@ async void sink_ComponentAdded(object sender, DispatcherEventArgs<VBComponent> e
316
353
317
354
async void sink_ComponentActivated ( object sender , DispatcherEventArgs < VBComponent > e )
318
355
{
356
+ if ( ! _handleSinkEvents ) { return ; }
357
+
319
358
if ( ! _parser . State . AllDeclarations . Any ( ) )
320
359
{
321
360
return ;
@@ -327,6 +366,8 @@ async void sink_ComponentActivated(object sender, DispatcherEventArgs<VBComponen
327
366
328
367
async void sink_ProjectRenamed ( object sender , DispatcherRenamedEventArgs < VBProject > e )
329
368
{
369
+ if ( ! _handleSinkEvents ) { return ; }
370
+
330
371
if ( ! _parser . State . AllDeclarations . Any ( ) )
331
372
{
332
373
return ;
@@ -342,6 +383,8 @@ async void sink_ProjectRenamed(object sender, DispatcherRenamedEventArgs<VBProje
342
383
343
384
async void sink_ProjectActivated ( object sender , DispatcherEventArgs < VBProject > e )
344
385
{
386
+ if ( ! _handleSinkEvents ) { return ; }
387
+
345
388
if ( ! _parser . State . AllDeclarations . Any ( ) )
346
389
{
347
390
return ;
@@ -395,13 +438,20 @@ private void LoadConfig()
395
438
}
396
439
397
440
private bool _disposed ;
441
+
398
442
public void Dispose ( )
399
443
{
400
444
if ( _disposed )
401
445
{
402
446
return ;
403
447
}
404
448
449
+ if ( _branchesVM != null )
450
+ {
451
+ _branchesVM . MergeStarted -= _branchesVM_MergeStarted ;
452
+ _branchesVM . MergeCompleted -= _branchesVM_MergeCompleted ;
453
+ }
454
+
405
455
if ( _hooks != null )
406
456
{
407
457
_hooks . MessageReceived -= _hooks_MessageReceived ;
0 commit comments