Skip to content

Commit d32a5d4

Browse files
committed
fixes #2422
1 parent c42d422 commit d32a5d4

File tree

9 files changed

+262
-104
lines changed

9 files changed

+262
-104
lines changed

RetailCoder.VBE/App.cs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ private void RefreshSelection()
8484
if (!pane.IsWrappingNullReference)
8585
{
8686
selectedDeclaration = _parser.State.FindSelectedDeclaration(pane);
87-
_stateBar.SetContextSelectionCaption(GetSelectionText(selectedDeclaration));
87+
var caption = _stateBar.GetContextSelectionCaption(_vbe.ActiveCodePane, selectedDeclaration);
88+
_stateBar.SetContextSelectionCaption(caption);
8889
}
8990

9091
var currentStatus = _parser.State.Status;
@@ -119,7 +120,7 @@ private string GetSelectionText(Declaration declaration)
119120
? Declaration.TypeHintToTypeName[declaration.TypeHint]
120121
: declaration.AsTypeName;
121122

122-
return string.Format("{0}|{1}: {2} ({3}{4})",
123+
return string.Format("{0}|{1}.{2} ({3}{4})",
123124
declaration.QualifiedSelection.Selection,
124125
declaration.QualifiedName.QualifiedModuleName,
125126
declaration.IdentifierName,
@@ -128,6 +129,30 @@ private string GetSelectionText(Declaration declaration)
128129
}
129130
else if (declaration != null)
130131
{
132+
var qualifiedModuleName = declaration.QualifiedName.QualifiedModuleName.ToString();
133+
if (declaration.DeclarationType == DeclarationType.Enumeration ||
134+
declaration.DeclarationType == DeclarationType.UserDefinedType)
135+
{
136+
qualifiedModuleName = string.Format("{0};{1}",
137+
Path.GetFileName(declaration.QualifiedName.QualifiedModuleName.ProjectPath),
138+
declaration.QualifiedName.QualifiedModuleName.ComponentName);
139+
}
140+
else if (declaration.DeclarationType == DeclarationType.EnumerationMember ||
141+
declaration.DeclarationType == DeclarationType.UserDefinedTypeMember)
142+
{
143+
qualifiedModuleName = string.Format("{0};{1}.{2}",
144+
Path.GetFileName(declaration.QualifiedName.QualifiedModuleName.ProjectPath),
145+
declaration.QualifiedName.QualifiedModuleName.ComponentName,
146+
declaration.ParentDeclaration.IdentifierName);
147+
}
148+
else if (declaration.DeclarationType == DeclarationType.ClassModule ||
149+
declaration.DeclarationType == DeclarationType.ProceduralModule)
150+
{
151+
qualifiedModuleName = string.Format("{0};{1}",
152+
Path.GetFileName(declaration.QualifiedName.QualifiedModuleName.ProjectPath),
153+
declaration.QualifiedName.QualifiedModuleName.ProjectName);
154+
}
155+
131156
// todo: confirm this is what we want, and then refator
132157
var selection = _vbe.ActiveCodePane.GetQualifiedSelection();
133158
if (selection.HasValue)
@@ -136,9 +161,9 @@ private string GetSelectionText(Declaration declaration)
136161
? Declaration.TypeHintToTypeName[declaration.TypeHint]
137162
: declaration.AsTypeName;
138163

139-
return string.Format("{0}|{1}: {2} ({3}{4})",
164+
return string.Format("{0}|{1}.{2} ({3}{4})",
140165
selection.Value.Selection,
141-
declaration.QualifiedName.QualifiedModuleName,
166+
qualifiedModuleName,
142167
declaration.IdentifierName,
143168
RubberduckUI.ResourceManager.GetString("DeclarationType_" + declaration.DeclarationType, UI.Settings.Settings.Culture),
144169
string.IsNullOrEmpty(declaration.AsTypeName) ? string.Empty : ": " + typeName);

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@
451451
<Compile Include="UI\CodeExplorer\Commands\AddTestModuleCommand.cs" />
452452
<Compile Include="UI\Command\MenuItems\CommandBars\AppCommandBarBase.cs" />
453453
<Compile Include="UI\Command\MenuItems\CommandBars\ContextSelectionLabelMenuItem.cs" />
454+
<Compile Include="UI\Command\MenuItems\CommandBars\IContextFormatter.cs" />
454455
<Compile Include="UI\Command\MenuItems\CommandBars\ReparseCommandMenuItem.cs" />
455456
<Compile Include="UI\Command\MenuItems\CommandBars\RubberduckCommandBar.cs" />
456457
<Compile Include="UI\Command\MenuItems\CommandBars\SerializeDeclarationsCommandMenuItem.cs" />
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using System;
2+
using System.Linq;
3+
using Rubberduck.Parsing.Symbols;
4+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
5+
6+
namespace Rubberduck.UI.Command.MenuItems.CommandBars
7+
{
8+
public interface IContextFormatter
9+
{
10+
/// <summary>
11+
/// Determines the formatting of the contextual selection caption.
12+
/// </summary>
13+
string Format(ICodePane activeCodePane, Declaration declaration);
14+
}
15+
16+
public class ContextFormatter : IContextFormatter
17+
{
18+
public string Format(ICodePane activeCodePane, Declaration declaration)
19+
{
20+
if (activeCodePane == null)
21+
{
22+
return string.Empty;
23+
}
24+
25+
var qualifiedSelection = activeCodePane.GetQualifiedSelection();
26+
if (declaration == null || !qualifiedSelection.HasValue)
27+
{
28+
return string.Empty;
29+
}
30+
31+
var selection = qualifiedSelection.Value;
32+
var codePaneSelectionText = selection.Selection.ToString();
33+
var contextSelectionText = Format(declaration);
34+
35+
return string.Format("{0} | {1}", codePaneSelectionText, contextSelectionText);
36+
}
37+
38+
private string Format(Declaration declaration)
39+
{
40+
var formattedDeclaration = string.Empty;
41+
var moduleName = declaration.QualifiedName.QualifiedModuleName;
42+
var typeName = declaration.HasTypeHint
43+
? Declaration.TypeHintToTypeName[declaration.TypeHint]
44+
: declaration.AsTypeName;
45+
var declarationType = RubberduckUI.ResourceManager.GetString("DeclarationType_" + declaration.DeclarationType, Settings.Settings.Culture);
46+
47+
typeName = "(" + declarationType + (string.IsNullOrEmpty(typeName) ? string.Empty : ":" + typeName) + ")";
48+
49+
if (declaration.DeclarationType.HasFlag(DeclarationType.Module))
50+
{
51+
formattedDeclaration = moduleName.ToString();
52+
}
53+
54+
if (declaration.DeclarationType.HasFlag(DeclarationType.Member))
55+
{
56+
formattedDeclaration = declaration.QualifiedName.ToString();
57+
if (declaration.DeclarationType == DeclarationType.Function
58+
|| declaration.DeclarationType == DeclarationType.PropertyGet)
59+
{
60+
formattedDeclaration += typeName;
61+
}
62+
}
63+
64+
if (declaration.DeclarationType == DeclarationType.Enumeration
65+
|| declaration.DeclarationType == DeclarationType.UserDefinedType)
66+
{
67+
formattedDeclaration = declaration.IsBuiltIn
68+
// built-in enums & UDT's don't have a module
69+
? System.IO.Path.GetFileName(moduleName.ProjectPath) + ";" + moduleName.ProjectName + "." + declaration.IdentifierName
70+
: moduleName.ToString();
71+
}
72+
73+
if (declaration.DeclarationType == DeclarationType.EnumerationMember
74+
|| declaration.DeclarationType == DeclarationType.UserDefinedTypeMember)
75+
{
76+
formattedDeclaration = string.Format("{0}.{1}.{2}",
77+
declaration.IsBuiltIn
78+
? System.IO.Path.GetFileName(moduleName.ProjectPath) + ";" + moduleName.ProjectName
79+
: moduleName.ToString(),
80+
declaration.ParentDeclaration.IdentifierName,
81+
declaration.IdentifierName);
82+
}
83+
84+
var subscripts = declaration.IsArray ? "()" : string.Empty;
85+
if (declaration.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Member))
86+
{
87+
// locals, parameters
88+
formattedDeclaration = string.Format("{0}:{1}{2} {3}", declaration.ParentDeclaration.QualifiedName, declaration.IdentifierName, subscripts, typeName);
89+
}
90+
91+
if (declaration.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Module))
92+
{
93+
// fields
94+
var withEvents = declaration.IsWithEvents ? "(WithEvents) " : string.Empty;
95+
formattedDeclaration = string.Format("{0}{1}.{2} {3}", withEvents, moduleName, declaration.IdentifierName, typeName);
96+
}
97+
98+
return string.Format("{0} | {1} {2}", formattedDeclaration.Trim(), declaration.References.Count(), RubberduckUI.ContextReferences);
99+
}
100+
}
101+
}

RetailCoder.VBE/UI/Command/MenuItems/CommandBars/RubberduckCommandBar.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
using System;
22
using System.Collections.Generic;
3+
using Rubberduck.Parsing.Symbols;
34
using Rubberduck.Parsing.VBA;
5+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
46
using Rubberduck.VBEditor.SafeComWrappers.Office.Core;
57

68
namespace Rubberduck.UI.Command.MenuItems.CommandBars
79
{
810
public class RubberduckCommandBar : AppCommandBarBase, IDisposable
911
{
10-
public RubberduckCommandBar(IEnumerable<ICommandMenuItem> items)
12+
private readonly IContextFormatter _formatter;
13+
14+
public RubberduckCommandBar(IEnumerable<ICommandMenuItem> items, IContextFormatter formatter)
1115
: base("Rubberduck", CommandBarPosition.Top, items)
1216
{
17+
_formatter = formatter;
1318
}
1419

1520
public void SetStatusLabelCaption(ParserState state, int? errorCount = null)
@@ -38,6 +43,11 @@ public void SetStatusLabelCaption(string caption, int? errorCount = null)
3843
Localize();
3944
}
4045

46+
public string GetContextSelectionCaption(ICodePane activeCodePane, Declaration declaration)
47+
{
48+
return _formatter.Format(activeCodePane, declaration);
49+
}
50+
4151
public void SetContextSelectionCaption(string caption)
4252
{
4353
var child = FindChildByTag(typeof(ContextSelectionLabelMenuItem).FullName) as ContextSelectionLabelMenuItem;

RetailCoder.VBE/UI/RubberduckUI.Designer.cs

Lines changed: 22 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)