Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
retailcoder committed Feb 22, 2015
2 parents 6124559 + 67c178b commit 88feac2
Show file tree
Hide file tree
Showing 21 changed files with 383 additions and 270 deletions.
11 changes: 10 additions & 1 deletion RetailCoder.VBE/App.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,16 @@ private void EnableCodeInspections(Configuration config)

public void Dispose()
{
_menu.Dispose();
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing && _menu != null)
{
_menu.Dispose();
}
}

public void CreateExtUi()
Expand Down
2 changes: 1 addition & 1 deletion RetailCoder.VBE/Config/ConfigurationLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public Configuration LoadConfiguration()
}
else
{
throw ex;
throw;
}
}
}
Expand Down
8 changes: 7 additions & 1 deletion RetailCoder.VBE/Extension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,13 @@ public void OnDisconnection(ext_DisconnectMode RemoveMode, ref Array custom)

public void Dispose()
{
if (_app != null)
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (disposing & _app != null)
{
_app.Dispose();
}
Expand Down
67 changes: 55 additions & 12 deletions RetailCoder.VBE/Rubberduck.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,6 @@
<EmbedInteropTypes>True</EmbedInteropTypes>
<HintPath>..\..\..\..\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Access\14.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Access.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.Outlook, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Office.Interop.PowerPoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Office.Interop.Publisher, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Office.Interop.Visio, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
Expand Down Expand Up @@ -130,6 +118,7 @@
<DependentUpon>ExtractMethodDialog.cs</DependentUpon>
</Compile>
<Compile Include="UI\Refactorings\ExtractMethod\ValueChangedEventArgs.cs" />
<Compile Include="UI\ToDoItems\IToDoExplorerWindow.cs" />
<Compile Include="VBA\Nodes\OptionNode.cs" />
<Compile Include="VBA\Nodes\EnumNode.cs" />
<Compile Include="VBA\Nodes\DeclaredIdentifierNode.cs" />
Expand Down Expand Up @@ -340,6 +329,24 @@
<Compile Include="VBEHost\WordApp.cs" />
</ItemGroup>
<ItemGroup>
<COMReference Include="ADODB">
<Guid>{00000205-0000-0010-8000-00AA006D2EA4}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>5</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="DAO">
<Guid>{00025E01-0000-0000-C000-000000000046}</Guid>
<VersionMajor>5</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
Expand All @@ -358,6 +365,33 @@
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Interop.Outlook">
<Guid>{00062FFF-0000-0000-C000-000000000046}</Guid>
<VersionMajor>9</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Interop.PowerPoint">
<Guid>{91493440-5A91-11CF-8700-00AA0060263B}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>9</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Interop.Publisher">
<Guid>{0002123C-0000-0000-C000-000000000046}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>1</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="Microsoft.Office.Interop.Word">
<Guid>{00020905-0000-0000-C000-000000000046}</Guid>
<VersionMajor>8</VersionMajor>
Expand Down Expand Up @@ -385,6 +419,15 @@
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="VisioViewer">
<Guid>{BA35B84E-A623-471B-8B09-6D72DD072F25}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Inspections\InspectionNames.resx">
Expand Down
11 changes: 4 additions & 7 deletions RetailCoder.VBE/SourceControl/SourceControlException.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;

namespace Rubberduck.SourceControl
{
[Serializable]
public class SourceControlException : Exception
{
public SourceControlException() { }
public SourceControlException(string message) : base(message) { }
public SourceControlException(string message, Exception inner) : base(message, inner) { }
protected SourceControlException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)

protected SourceControlException(SerializationInfo info,StreamingContext context)
: base(info, context) { }
}

Expand Down
69 changes: 33 additions & 36 deletions RetailCoder.VBE/UI/CodeExplorer/CodeExplorerDockablePresenter.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Vbe.Interop;
using Microsoft.Vbe.Interop;
using Rubberduck.Extensions;
using Rubberduck.Inspections;
using Rubberduck.VBA;
using Rubberduck.VBA.Nodes;
using Rubberduck.VBA.ParseTreeListeners;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using AddIn = Microsoft.Vbe.Interop.AddIn;
using Font = System.Drawing.Font;
using Selection = Rubberduck.Extensions.Selection;
Expand All @@ -26,7 +22,6 @@ public CodeExplorerDockablePresenter(IRubberduckParser parser, VBE vbe, AddIn ad
: base(vbe, addIn, view)
{
_parser = parser;
//Control.SolutionTree.Font = new Font(Control.SolutionTree.Font, FontStyle.Bold);
RegisterControlEvents();
RefreshExplorerTreeView();
Control.SolutionTree.Refresh();
Expand Down Expand Up @@ -64,21 +59,26 @@ private void NavigateExplorerTreeNode(object sender, TreeNodeNavigateCodeEventAr
}
}

private void RefreshExplorerTreeView()
private void RefreshExplorerTreeView(object sender, System.EventArgs e)
{
RefreshExplorerTreeView();
}

private async void RefreshExplorerTreeView()
{
Control.SolutionTree.Nodes.Clear();

var projects = VBE.VBProjects.Cast<VBProject>();
foreach (var vbProject in projects)
{
var project = vbProject;
Task.Run(() =>
await Task.Run(() =>
{
var node = new TreeNode(project.Name + " (parsing...)");
node.ImageKey = "Hourglass";
node.SelectedImageKey = node.ImageKey;
Control.Invoke((MethodInvoker) delegate
Control.Invoke((MethodInvoker)delegate
{
Control.SolutionTree.Nodes.Add(node);
AddProjectNodes(project, node);
Expand All @@ -89,17 +89,10 @@ private void RefreshExplorerTreeView()
Control.SolutionTree.BackColor = Control.SolutionTree.BackColor;
}

private void RefreshExplorerTreeView(object sender, System.EventArgs e)
{
Control.Cursor = Cursors.WaitCursor;
RefreshExplorerTreeView();
Control.Cursor = Cursors.Default;
}

private void AddProjectNodes(VBProject project, TreeNode root)
{
var treeView = Control.SolutionTree;
Control.Invoke((MethodInvoker) async delegate
Control.Invoke((MethodInvoker)async delegate
{
await AddModuleNodesAsync(project, treeView.Font, root);
root.Text = project.Name;
Expand All @@ -110,30 +103,34 @@ private void AddProjectNodes(VBProject project, TreeNode root)

private async Task AddModuleNodesAsync(VBProject project, Font font, TreeNode root)
{
//todo: parsing modules async is great, but we'll never see modules "(parsing...)" because the project nodes are collapsed.
foreach (VBComponent vbComponent in project.VBComponents)
{
var component = vbComponent;
// todo: find a way to avoid blocking UI here (a 'TreeNode' cannot be 'invoked')
// Task.Run(() =>
// {
var qualifiedName = component.QualifiedName();
var node = new TreeNode(component.Name + " (parsing...)");
node.ImageKey = "Hourglass";
node.SelectedImageKey = node.ImageKey;
node.NodeFont = new Font(font, FontStyle.Regular);
var qualifiedName = component.QualifiedName();
var node = new TreeNode(component.Name + " (parsing...)");
node.ImageKey = "Hourglass";
node.SelectedImageKey = node.ImageKey;
node.NodeFont = new Font(font, FontStyle.Regular);

root.Nodes.Add(node);
root.Nodes.Add(node);

var moduleNode = _parser.Parse(component).ParseTree.GetContexts<TreeViewListener, TreeNode>(new TreeViewListener(qualifiedName)).Single();
node.Nodes.AddRange(moduleNode.Context.Nodes.Cast<TreeNode>().ToArray());
var getModuleNode = new Task<TreeNode[]>(() => ParseModule(component, ref qualifiedName));
getModuleNode.Start();
node.Nodes.AddRange(await getModuleNode);

node.Text = component.Name;
node.ImageKey = "StandardModule";
node.SelectedImageKey = node.ImageKey;
// });
node.Text = component.Name;
node.ImageKey = "StandardModule";
node.SelectedImageKey = node.ImageKey;
}
}

private TreeNode[] ParseModule(VBComponent component, ref QualifiedModuleName qualifiedName)
{
var moduleNode = _parser.Parse(component).ParseTree.GetContexts<TreeViewListener, TreeNode>(new TreeViewListener(qualifiedName)).Single();
return moduleNode.Context.Nodes.Cast<TreeNode>().ToArray();
}

private void TreeViewAfterExpandNode(object sender, TreeViewEventArgs e)
{
if (!e.Node.ImageKey.Contains("Folder"))
Expand Down
52 changes: 28 additions & 24 deletions RetailCoder.VBE/UI/CodeExplorer/CodeExplorerMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,48 @@
using Microsoft.Office.Core;
using Microsoft.Vbe.Interop;
using Rubberduck.VBA;
using CommandBarButtonClickEvent = Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler;

namespace Rubberduck.UI.CodeExplorer
{
public class CodeExplorerMenu
public class CodeExplorerMenu : Menu
{
private readonly VBE _vbe;
private readonly AddIn _addin;
private readonly IRubberduckParser _parser;

private CommandBarButton _codeExplorerButton;
private readonly CodeExplorerWindow _window;
private readonly CodeExplorerDockablePresenter _presenter; //if presenter goes out of scope, so does it's toolwindow Issue #169

public CodeExplorerMenu(VBE vbe, AddIn addin, IRubberduckParser parser)
public CodeExplorerMenu(VBE vbe, AddIn addIn, CodeExplorerWindow view, CodeExplorerDockablePresenter presenter)
:base(vbe, addIn)
{
_vbe = vbe;
_addin = addin;
_parser = parser;

_window = new CodeExplorerWindow();
_window = view;
_presenter = presenter;
}

private CommandBarButton _codeExplorerButton;

public void Initialize(CommandBarControls menuControls)
public void Initialize(CommandBarPopup parentMenu)
{
_codeExplorerButton = menuControls.Add(MsoControlType.msoControlButton, Temporary: true) as CommandBarButton;
Debug.Assert(_codeExplorerButton != null);

_codeExplorerButton.Caption = "&Code Explorer";
_codeExplorerButton.BeginGroup = true;

_codeExplorerButton.FaceId = 3039;
_codeExplorerButton.Click += OnCodeExplorerButtonClick;
_codeExplorerButton = AddButton(parentMenu, "&Code Explorer", true, new CommandBarButtonClickEvent(OnCodeExplorerButtonClick), 3039);
}

private void OnCodeExplorerButtonClick(CommandBarButton button, ref bool cancelDefault)
{
var presenter = new CodeExplorerDockablePresenter(_parser, _vbe, _addin, _window);
presenter.Show();
_presenter.Show();
}

bool disposed = false;
protected override void Dispose(bool disposing)
{
if (disposed)
{
return;
}

if (disposing && _window != null)
{
_window.Dispose();
}

disposed = true;
base.Dispose(disposing);
}
}
}

0 comments on commit 88feac2

Please sign in to comment.