Skip to content

Commit 98fae2c

Browse files
committed
merged from HEAD
2 parents f4b0855 + 9b59f23 commit 98fae2c

File tree

195 files changed

+12442
-8276
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

195 files changed

+12442
-8276
lines changed

Installer Build Script.iss

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,16 @@ end;
9595
function GetOfficeBitness(): Integer;
9696
var
9797
appBitness: Integer;
98-
officeExeNames: array[0..4] of String;
98+
officeExeNames: array[0..6] of String;
9999
i: Integer;
100100
begin
101101
officeExeNames[0] := 'excel.exe';
102102
officeExeNames[1] := 'msaccess.exe';
103103
officeExeNames[2] := 'winword.exe';
104104
officeExeNames[3] := 'outlook.exe';
105105
officeExeNames[4] := 'powerpnt.exe';
106+
officeExeNames[5] := 'mspub.exe';
107+
officeExeNames[6] := 'winproj.exe';
106108
107109
for i := 0 to 4 do begin
108110
appBitness := GetOfficeAppBitness(officeExeNames[i]);

RetailCoder.VBE/API/DeclarationType.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using System.Runtime.InteropServices;
1+
using System.Runtime.InteropServices;
32

43
namespace Rubberduck.API
54
{

RetailCoder.VBE/App.cs

Lines changed: 87 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using Rubberduck.Parsing.Symbols;
88
using Rubberduck.Parsing.VBA;
99
using Rubberduck.Settings;
10-
using Rubberduck.SmartIndenter;
1110
using Rubberduck.UI;
1211
using Rubberduck.UI.Command.MenuItems;
1312
using System;
@@ -18,7 +17,7 @@
1817
using System.Runtime.InteropServices.ComTypes;
1918
using System.Threading.Tasks;
2019
using System.Windows.Forms;
21-
using Rubberduck.Common.Hotkeys;
20+
using Rubberduck.UI.SourceControl;
2221

2322
namespace Rubberduck
2423
{
@@ -27,13 +26,15 @@ public sealed class App : IDisposable
2726
private const string FILE_TARGET_NAME = "file";
2827
private readonly VBE _vbe;
2928
private readonly IMessageBox _messageBox;
30-
private readonly IRubberduckParser _parser;
29+
private IRubberduckParser _parser;
3130
private AutoSave.AutoSave _autoSave;
3231
private IGeneralConfigService _configService;
33-
private IAppMenu _appMenus;
32+
private readonly IAppMenu _appMenus;
3433
private RubberduckCommandBar _stateBar;
35-
private readonly IIndenter _indenter;
3634
private IRubberduckHooks _hooks;
35+
private bool _handleSinkEvents = true;
36+
private readonly BranchesViewViewModel _branchesVM;
37+
private readonly SourceControlViewViewModel _sourceControlPanelVM;
3738

3839
private readonly Logger _logger;
3940

@@ -53,8 +54,8 @@ public App(VBE vbe, IMessageBox messageBox,
5354
IGeneralConfigService configService,
5455
IAppMenu appMenus,
5556
RubberduckCommandBar stateBar,
56-
IIndenter indenter,
57-
IRubberduckHooks hooks)
57+
IRubberduckHooks hooks,
58+
SourceControlDockablePresenter sourceControlPresenter)
5859
{
5960
_vbe = vbe;
6061
_messageBox = messageBox;
@@ -63,10 +64,19 @@ public App(VBE vbe, IMessageBox messageBox,
6364
_autoSave = new AutoSave.AutoSave(_vbe, _configService);
6465
_appMenus = appMenus;
6566
_stateBar = stateBar;
66-
_indenter = indenter;
6767
_hooks = hooks;
6868
_logger = LogManager.GetCurrentClassLogger();
6969

70+
var sourceControlPanel = (SourceControlPanel) sourceControlPresenter.Window();
71+
_sourceControlPanelVM = (SourceControlViewViewModel) sourceControlPanel.ViewModel;
72+
_branchesVM = (BranchesViewViewModel) _sourceControlPanelVM.TabItems.Single(t => t.ViewModel.Tab == SourceControlTab.Branches).ViewModel;
73+
74+
_sourceControlPanelVM.OpenRepoStarted += DisableSinkEventHandlers;
75+
_sourceControlPanelVM.OpenRepoCompleted += EnableSinkEventHandlersAndUpdateCache;
76+
77+
_branchesVM.LoadingComponentsStarted += DisableSinkEventHandlers;
78+
_branchesVM.LoadingComponentsCompleted += EnableSinkEventHandlersAndUpdateCache;
79+
7080
_hooks.MessageReceived += _hooks_MessageReceived;
7181
_configService.SettingsChanged += _configService_SettingsChanged;
7282
_configService.LanguageChanged += ConfigServiceLanguageChanged;
@@ -88,6 +98,22 @@ public App(VBE vbe, IMessageBox messageBox,
8898
UiDispatcher.Initialize();
8999
}
90100

101+
private void EnableSinkEventHandlersAndUpdateCache(object sender, EventArgs e)
102+
{
103+
_handleSinkEvents = true;
104+
105+
// update cache
106+
_parser.State.RemoveProject(_vbe.ActiveVBProject.HelpFile);
107+
_parser.State.AddProject(_vbe.ActiveVBProject);
108+
109+
_parser.State.OnParseRequested(this);
110+
}
111+
112+
private void DisableSinkEventHandlers(object sender, EventArgs e)
113+
{
114+
_handleSinkEvents = false;
115+
}
116+
91117
private void State_StatusMessageUpdate(object sender, RubberduckStatusMessageEventArgs e)
92118
{
93119
var message = e.Message;
@@ -169,6 +195,8 @@ public void Shutdown()
169195
#region sink handlers. todo: move to another class
170196
async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
171197
{
198+
if (!_handleSinkEvents) { return; }
199+
172200
if (e.Item.Protection == vbext_ProjectProtection.vbext_pp_locked)
173201
{
174202
_logger.Debug("Locked project '{0}' was removed.", e.Item.Name);
@@ -206,6 +234,8 @@ async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
206234

207235
async void sink_ProjectAdded(object sender, DispatcherEventArgs<VBProject> e)
208236
{
237+
if (!_handleSinkEvents) { return; }
238+
209239
_logger.Debug("Project '{0}' was added.", e.Item.Name);
210240
if (e.Item.Protection == vbext_ProjectProtection.vbext_pp_locked)
211241
{
@@ -261,6 +291,8 @@ private void RegisterComponentsEventSink(VBComponents components, string project
261291

262292
async void sink_ComponentSelected(object sender, DispatcherEventArgs<VBComponent> e)
263293
{
294+
if (!_handleSinkEvents) { return; }
295+
264296
if (!_parser.State.AllDeclarations.Any())
265297
{
266298
return;
@@ -272,29 +304,39 @@ async void sink_ComponentSelected(object sender, DispatcherEventArgs<VBComponent
272304

273305
async void sink_ComponentRenamed(object sender, DispatcherRenamedEventArgs<VBComponent> e)
274306
{
307+
if (!_handleSinkEvents) { return; }
308+
275309
if (!_parser.State.AllDeclarations.Any())
276310
{
277311
return;
278312
}
279313

314+
_sourceControlPanelVM.HandleRenamedComponent(e.Item, e.OldName);
315+
280316
_logger.Debug("Component '{0}' was renamed to '{1}'.", e.OldName, e.Item.Name);
281317

282318
_parser.State.RemoveRenamedComponent(e.Item, e.OldName);
283319
}
284320

285321
async void sink_ComponentRemoved(object sender, DispatcherEventArgs<VBComponent> e)
286322
{
323+
if (!_handleSinkEvents) { return; }
324+
287325
if (!_parser.State.AllDeclarations.Any())
288326
{
289327
return;
290328
}
291329

330+
_sourceControlPanelVM.HandleRemovedComponent(e.Item);
331+
292332
_logger.Debug("Component '{0}' was removed.", e.Item.Name);
293333
_parser.State.ClearStateCache(e.Item, true);
294334
}
295335

296336
async void sink_ComponentReloaded(object sender, DispatcherEventArgs<VBComponent> e)
297337
{
338+
if (!_handleSinkEvents) { return; }
339+
298340
if (!_parser.State.AllDeclarations.Any())
299341
{
300342
return;
@@ -306,17 +348,23 @@ async void sink_ComponentReloaded(object sender, DispatcherEventArgs<VBComponent
306348

307349
async void sink_ComponentAdded(object sender, DispatcherEventArgs<VBComponent> e)
308350
{
351+
if (!_handleSinkEvents) { return; }
352+
309353
if (!_parser.State.AllDeclarations.Any())
310354
{
311355
return;
312356
}
313357

358+
_sourceControlPanelVM.HandleAddedComponent(e.Item);
359+
314360
_logger.Debug("Component '{0}' was added.", e.Item.Name);
315361
_parser.State.OnParseRequested(sender, e.Item);
316362
}
317363

318364
async void sink_ComponentActivated(object sender, DispatcherEventArgs<VBComponent> e)
319365
{
366+
if (!_handleSinkEvents) { return; }
367+
320368
if (!_parser.State.AllDeclarations.Any())
321369
{
322370
return;
@@ -328,20 +376,25 @@ async void sink_ComponentActivated(object sender, DispatcherEventArgs<VBComponen
328376

329377
async void sink_ProjectRenamed(object sender, DispatcherRenamedEventArgs<VBProject> e)
330378
{
379+
if (!_handleSinkEvents) { return; }
380+
331381
if (!_parser.State.AllDeclarations.Any())
332382
{
333383
return;
334384
}
335385

336386
_logger.Debug("Project '{0}' (ID {1}) was renamed to '{2}'.", e.OldName, e.Item.HelpFile, e.Item.Name);
337387

338-
// note: if a bug is discovered with renaming a project, it may just need to be removed and readded.
388+
_parser.State.RemoveProject(e.Item.HelpFile);
389+
_parser.State.AddProject(e.Item);
339390

340391
_parser.State.OnParseRequested(sender);
341392
}
342393

343394
async void sink_ProjectActivated(object sender, DispatcherEventArgs<VBProject> e)
344395
{
396+
if (!_handleSinkEvents) { return; }
397+
345398
if (!_parser.State.AllDeclarations.Any())
346399
{
347400
return;
@@ -395,13 +448,36 @@ private void LoadConfig()
395448
}
396449

397450
private bool _disposed;
451+
398452
public void Dispose()
399453
{
400454
if (_disposed)
401455
{
402456
return;
403457
}
404458

459+
if (_sourceControlPanelVM != null)
460+
{
461+
_sourceControlPanelVM.OpenRepoStarted -= DisableSinkEventHandlers;
462+
_sourceControlPanelVM.OpenRepoCompleted -= EnableSinkEventHandlersAndUpdateCache;
463+
}
464+
465+
if (_branchesVM != null)
466+
{
467+
_branchesVM.LoadingComponentsStarted -= DisableSinkEventHandlers;
468+
_branchesVM.LoadingComponentsCompleted -= EnableSinkEventHandlersAndUpdateCache;
469+
}
470+
471+
_handleSinkEvents = false;
472+
473+
if (_parser != null && _parser.State != null)
474+
{
475+
_parser.State.StateChanged -= Parser_StateChanged;
476+
_parser.State.StatusMessageUpdate -= State_StatusMessageUpdate;
477+
_parser.Dispose();
478+
// I won't set this to null because other components may try to release things
479+
}
480+
405481
if (_hooks != null)
406482
{
407483
_hooks.MessageReceived -= _hooks_MessageReceived;
@@ -416,13 +492,6 @@ public void Dispose()
416492
_configService = null;
417493
}
418494

419-
if (_parser != null && _parser.State != null)
420-
{
421-
_parser.State.StateChanged -= Parser_StateChanged;
422-
_parser.State.StatusMessageUpdate -= State_StatusMessageUpdate;
423-
// I won't set this to null because other components may try to release things
424-
}
425-
426495
if (_stateBar != null)
427496
{
428497
_stateBar.Refresh -= _stateBar_Refresh;
@@ -465,6 +534,8 @@ public void Dispose()
465534
item.Value.Item1.Unadvise(item.Value.Item2);
466535
}
467536

537+
UiDispatcher.Shutdown();
538+
468539
_disposed = true;
469540
}
470541
}

RetailCoder.VBE/AppMenu.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Diagnostics;
34
using Rubberduck.Parsing.VBA;
45
using Rubberduck.UI.Command.MenuItems;
56
using Rubberduck.UI.Command.MenuItems.ParentMenus;
@@ -43,6 +44,7 @@ public void Dispose()
4344
{
4445
foreach (var menu in _menus)
4546
{
47+
menu.RemoveChildren();
4648
if (menu.Item != null)
4749
{
4850
menu.Item.Delete();

RetailCoder.VBE/Common/ClipboardWriter.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
31
using System.IO;
4-
using System.Linq;
5-
using System.Text;
6-
using System.Threading.Tasks;
72
using System.Windows;
83
using System.Windows.Media.Imaging;
94

0 commit comments

Comments
 (0)