Skip to content

Commit 48f6ca9

Browse files
author
slavara
committed
Merged hotfix/QuickOutline_size into develop
2 parents e3b3f3e + 0045bed commit 48f6ca9

File tree

10 files changed

+108
-105
lines changed

10 files changed

+108
-105
lines changed

QuickNavigate.Tests/Collections/ComparersTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ public void TestSortNameAndPackage0()
4040
"a.Sprite",
4141
"b.Sprite"
4242
});
43-
List<TypeNode> nodes = matches.Select(match => new TypeNode(new ClassModel() {InFile = FileModel.Ignore}, 0)
43+
var nodes = matches.Select(match => new ClassNode(new ClassModel {InFile = FileModel.Ignore}, 0)
4444
{
4545
Package = match.Substring(0, match.LastIndexOf(".")),
4646
Name = match.Substring(match.LastIndexOf(".") + 1)
4747
}).ToList();
48-
List<TypeNode> nodes0 = nodes.Where(node => node.Name.ToLower() == "sprite").ToList();
49-
List<TypeNode> nodes1 = nodes.Where(node => node.Name.ToLower() != "sprite" && node.Name.ToLower().StartsWith("sprite")).ToList();
50-
List<TypeNode> nodes2 = nodes.Where(node => node.Name.ToLower() != "sprite" && !node.Name.ToLower().StartsWith("sprite")).ToList();
48+
var nodes0 = nodes.Where(node => node.Name.ToLower() == "sprite").ToList();
49+
var nodes1 = nodes.Where(node => node.Name.ToLower() != "sprite" && node.Name.ToLower().StartsWith("sprite")).ToList();
50+
var nodes2 = nodes.Where(node => node.Name.ToLower() != "sprite" && !node.Name.ToLower().StartsWith("sprite")).ToList();
5151
nodes0.Sort(TypeExplorerNodeComparer.Package);
5252
Assert.AreEqual("Sprite", nodes0[0].Name);
5353
Assert.AreEqual("a", nodes0[0].Package);

QuickNavigate.Tests/Forms/TypeExplorerTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void TestNewTypeNode()
1919
},
2020
Name = "TestClass"
2121
};
22-
TypeNode node = new TypeNode(model, 0);
22+
ClassNode node = new ClassNode(model, 0);
2323
Assert.AreEqual(model, node.Model);
2424
Assert.IsFalse(node.IsPrivate);
2525
Assert.IsNull(node.Module);
@@ -39,7 +39,7 @@ public void TestNewTypeNodeWithClassFromSWC()
3939
},
4040
Name = "DisplayObject"
4141
};
42-
TypeNode node = new TypeNode(model, 0);
42+
ClassNode node = new ClassNode(model, 0);
4343
Assert.AreEqual("playerglobal.swc", node.Module);
4444
Assert.AreEqual("DisplayObject", node.Text);
4545
Assert.AreEqual("flash.display", node.In);
@@ -58,7 +58,7 @@ public void TestNewTypeNodeWithPrivateClass()
5858
Name = "TestClass2",
5959
Access = Visibility.Private
6060
};
61-
TypeNode node = new TypeNode(model, 0);
61+
ClassNode node = new ClassNode(model, 0);
6262
Assert.IsTrue(node.IsPrivate);
6363
Assert.AreEqual("TestClass2", node.Text);
6464
Assert.AreEqual("test.TestClass", node.In);

QuickNavigate.Tests/QuickNavigate.Tests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
<AppDesignerFolder>Properties</AppDesignerFolder>
99
<RootNamespace>QuickNavigate.Tests</RootNamespace>
1010
<AssemblyName>QuickNavigate.Tests</AssemblyName>
11-
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
11+
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
1212
<FileAlignment>512</FileAlignment>
1313
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
1414
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
1515
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
1616
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
1717
<IsCodedUITest>False</IsCodedUITest>
1818
<TestProjectType>UnitTest</TestProjectType>
19+
<TargetFrameworkProfile />
1920
</PropertyGroup>
2021
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
2122
<DebugSymbols>true</DebugSymbols>

QuickNavigate/Collections/Comparers.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace QuickNavigate.Collections
66
{
7-
public class NodeNameComparer : IComparer<TypeNode>
7+
public class NodeNameComparer : IComparer<ClassNode>
88
{
99
/// <summary>
1010
/// Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
@@ -14,13 +14,13 @@ public class NodeNameComparer : IComparer<TypeNode>
1414
/// Value Condition Less than zero<paramref name="x"/> is less than <paramref name="y"/>.Zero<paramref name="x"/> equals <paramref name="y"/>.Greater than zero<paramref name="x"/> is greater than <paramref name="y"/>.
1515
/// </returns>
1616
/// <param name="x">The first object to compare.</param><param name="y">The second object to compare.</param>
17-
public int Compare(TypeNode x, TypeNode y)
17+
public int Compare(ClassNode x, ClassNode y)
1818
{
1919
return StringComparer.Ordinal.Compare(x.Name.ToLower(), y.Name.ToLower());
2020
}
2121
}
2222

23-
public class NodePackageComparer : IComparer<TypeNode>
23+
public class NodePackageComparer : IComparer<ClassNode>
2424
{
2525
/// <summary>
2626
/// Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
@@ -30,15 +30,15 @@ public class NodePackageComparer : IComparer<TypeNode>
3030
/// Value Condition Less than zero<paramref name="x"/> is less than <paramref name="y"/>.Zero<paramref name="x"/> equals <paramref name="y"/>.Greater than zero<paramref name="x"/> is greater than <paramref name="y"/>.
3131
/// </returns>
3232
/// <param name="x">The first object to compare.</param><param name="y">The second object to compare.</param>
33-
public int Compare(TypeNode x, TypeNode y)
33+
public int Compare(ClassNode x, ClassNode y)
3434
{
3535
return x.Package.Length == y.Package.Length
3636
? StringComparer.Ordinal.Compare(x.Package, y.Package)
3737
: x.Package.Length.CompareTo(y.Package.Length);
3838
}
3939
}
4040

41-
public class NodeNamePackageComparer : IComparer<TypeNode>
41+
public class NodeNamePackageComparer : IComparer<ClassNode>
4242
{
4343
/// <summary>
4444
/// Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
@@ -48,7 +48,7 @@ public class NodeNamePackageComparer : IComparer<TypeNode>
4848
/// Value Condition Less than zero<paramref name="x"/> is less than <paramref name="y"/>.Zero<paramref name="x"/> equals <paramref name="y"/>.Greater than zero<paramref name="x"/> is greater than <paramref name="y"/>.
4949
/// </returns>
5050
/// <param name="x">The first object to compare.</param><param name="y">The second object to compare.</param>
51-
public int Compare(TypeNode x, TypeNode y) => StringComparer.OrdinalIgnoreCase.Compare($"{x.Name}{x.Package}", $"{y.Name}{y.Package}");
51+
public int Compare(ClassNode x, ClassNode y) => StringComparer.OrdinalIgnoreCase.Compare($"{x.Name}{x.Package}", $"{y.Name}{y.Package}");
5252
}
5353

5454
public static class TypeExplorerNodeComparer

QuickNavigate/Forms/ClassHierarchyForm.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ protected override void ShowContextMenu()
195195
protected override void ShowContextMenu(Point position)
196196
{
197197
if (SelectedNode == null) return;
198-
var classModel = ((TypeNode) SelectedNode).Model;
198+
var classModel = ((ClassNode) SelectedNode).Model;
199199
ContextMenuStrip.Items.Clear();
200200
ContextMenuStrip.Items.Add(QuickContextMenuItem.GotoPositionOrLineMenuItem);
201201
ContextMenuStrip.Items.Add(QuickContextMenuItem.ShowInQuickOutlineMenuItem);
@@ -251,7 +251,7 @@ protected override void OnKeyDown(KeyEventArgs e)
251251

252252
protected override void OnTreeNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
253253
{
254-
var node = e.Node as TypeNode;
254+
var node = e.Node as ClassNode;
255255
if (node == null) return;
256256
tree.SelectedNode = node;
257257
base.OnTreeNodeMouseClick(sender, e);

QuickNavigate/Forms/Nodes.cs

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,55 +6,56 @@
66

77
namespace QuickNavigate.Forms
88
{
9-
public class TypeNode : TreeNode
9+
public class MemberNode : TreeNode
10+
{
11+
public FileModel InFile;
12+
13+
public MemberNode(string text, int imageIndex, int selectedImageIndex) : base(text, imageIndex, selectedImageIndex)
14+
{
15+
}
16+
}
17+
18+
public class ClassNode : TreeNode
1019
{
1120
public ClassModel Model;
21+
public FileModel InFile;
1222
public new string Name;
1323
public string In;
1424
public string NameInLowercase;
1525
public string Package;
1626
public string Module;
1727
public bool IsPrivate;
1828

19-
public TypeNode([NotNull] ClassModel model, int icon) : this(model, icon, icon)
29+
public ClassNode([NotNull] ClassModel model, int icon) : this(model, icon, icon)
2030
{
2131
}
2232

23-
public TypeNode([NotNull] ClassModel model, int imageIndex, int selectedImageIndex)
33+
public ClassNode([NotNull] ClassModel model, int imageIndex, int selectedImageIndex)
2434
{
2535
Model = model;
2636
Name = model.Name;
27-
var inFile = model.InFile;
28-
Package = inFile != null ? inFile.Package : string.Empty;
37+
InFile = model.InFile;
38+
Package = InFile != null ? InFile.Package : string.Empty;
2939
IsPrivate = (model.Access & Visibility.Private) > 0;
3040
Text = Name;
3141
Tag = "class";
3242
In = Package;
3343
if (!string.IsNullOrEmpty(Package))
3444
{
35-
if (IsPrivate) In = $"{Package}.{Path.GetFileNameWithoutExtension(inFile.FileName)}";
45+
if (IsPrivate) In = $"{Package}.{Path.GetFileNameWithoutExtension(InFile.FileName)}";
3646
}
37-
else if (IsPrivate) In = Path.GetFileNameWithoutExtension(inFile.FileName);
47+
else if (IsPrivate) In = Path.GetFileNameWithoutExtension(InFile.FileName);
3848
ImageIndex = imageIndex;
3949
SelectedImageIndex = selectedImageIndex;
40-
if (inFile == null) return;
41-
var match = Regex.Match(inFile.FileName, @"\S*.swc", RegexOptions.Compiled);
50+
if (InFile == null) return;
51+
var match = Regex.Match(InFile.FileName, @"\S*.swc", RegexOptions.Compiled);
4252
if (match.Success) Module = Path.GetFileName(match.Value);
4353
}
4454
}
4555

46-
public class MemberNode : TreeNode
47-
{
48-
public FileModel InFile;
49-
50-
public MemberNode(string text, int imageIndex, int selectedImageIndex) : base(text, imageIndex, selectedImageIndex)
51-
{
52-
}
53-
}
54-
55-
class ClassHierarchyNode : TypeNode
56+
class ClassHierarchyNode : ClassNode
5657
{
57-
public ClassHierarchyNode(ClassModel model, int imageIndex, int selectedImageIndex)
58+
public ClassHierarchyNode([NotNull] ClassModel model, int imageIndex, int selectedImageIndex)
5859
: base(model, imageIndex, selectedImageIndex)
5960
{
6061
Text = model.Type;

QuickNavigate/Forms/QuickOutlineForm.cs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ namespace QuickNavigate.Forms
1414
{
1515
public sealed partial class QuickOutlineForm : QuickForm
1616
{
17-
[NotNull] readonly Settings settings;
1817
readonly ContextMenuStrip contextMenu = new ContextMenuStrip { Renderer = new DockPanelStripRenderer(false) };
1918
readonly ContextMenu inputEmptyContextMenu = new ContextMenu();
2019
readonly List<Button> filters = new List<Button>();
@@ -29,13 +28,11 @@ public sealed partial class QuickOutlineForm : QuickForm
2928
/// <param name="inFile"></param>
3029
/// <param name="inClass"></param>
3130
/// <param name="settings"></param>
32-
public QuickOutlineForm([NotNull] FileModel inFile, [CanBeNull] ClassModel inClass, [NotNull] Settings settings)
31+
public QuickOutlineForm([NotNull] FileModel inFile, [CanBeNull] ClassModel inClass, [NotNull] Settings settings) : base(settings)
3332
{
3433
InFile = inFile;
3534
InClass = inClass ?? ClassModel.VoidClass;
36-
this.settings = settings;
3735
InitializeComponent();
38-
if (settings.QuickOutlineSize.Width > MinimumSize.Width) Size = settings.QuickOutlineSize;
3936
InitializeTree();
4037
InitializeTheme();
4138
RefreshTree();
@@ -109,26 +106,25 @@ void RefreshTree()
109106
void FillTree()
110107
{
111108
var isHaxe = InFile.haXe;
112-
if (InFile.Members.Count > 0) AddMembers(tree.Nodes, InFile.Members, isHaxe);
113-
foreach (var aClass in InFile.Classes)
109+
if (InFile.Members.Count > 0) AddMembers(tree.Nodes, InFile, InFile.Members, isHaxe);
110+
foreach (var classModel in InFile.Classes)
114111
{
115-
var icon = PluginUI.GetIcon(aClass.Flags, aClass.Access);
116-
TreeNode node = new TypeNode(aClass, icon);
112+
var node = FormHelper.CreateTreeNode(classModel);
117113
tree.Nodes.Add(node);
118-
AddMembers(node.Nodes, aClass.Members, isHaxe, aClass.Equals(InClass));
114+
AddMembers(node.Nodes, InFile, classModel.Members, isHaxe, classModel.Equals(InClass));
119115
}
120116
if (SelectedNode != null || tree.Nodes.Count == 0) return;
121117
var search = input.Text.Trim();
122118
if (search.Length == 0)
123119
{
124120
if (InClass.Equals(ClassModel.VoidClass)) tree.SelectedNode = tree.Nodes[0];
125-
else tree.SelectedNode = tree.Nodes.OfType<TypeNode>().FirstOrDefault(it => it.Model.Equals(InClass));
121+
else tree.SelectedNode = tree.Nodes.OfType<ClassNode>().FirstOrDefault(it => it.Model.Equals(InClass));
126122
}
127123
else
128124
{
129125
var nodes = tree.Nodes.OfType<TreeNode>().ToList().FindAll(it =>
130126
{
131-
var word = ((TypeNode) it).Model.QualifiedName;
127+
var word = ((ClassNode) it).Model.QualifiedName;
132128
var score = PluginCore.Controls.CompletionList.SmartMatch(word, search, search.Length);
133129
return score > 0 && score < 6;
134130
});
@@ -139,12 +135,12 @@ void FillTree()
139135
}
140136
}
141137

142-
void AddMembers(TreeNodeCollection nodes, MemberList members, bool isHaxe)
138+
void AddMembers(TreeNodeCollection nodes, FileModel inFile, MemberList members, bool isHaxe)
143139
{
144-
AddMembers(nodes, members, isHaxe, true);
140+
AddMembers(nodes, inFile, members, isHaxe, true);
145141
}
146142

147-
void AddMembers(TreeNodeCollection nodes, MemberList members, bool isHaxe, bool currentClass)
143+
void AddMembers(TreeNodeCollection nodes, FileModel inFile, MemberList members, bool isHaxe, bool currentClass)
148144
{
149145
var items = members.Items.ToList();
150146
if (CurrentFilter != null)
@@ -157,11 +153,7 @@ void AddMembers(TreeNodeCollection nodes, MemberList members, bool isHaxe, bool
157153
if (searchIsNotEmpty) items = SearchUtil.FindAll(items, search);
158154
foreach (var it in items)
159155
{
160-
var flags = it.Flags;
161-
var icon = PluginUI.GetIcon(flags, it.Access);
162-
var constrDecl = isHaxe && (flags & FlagType.Constructor) > 0 ? "new" : it.FullName;
163-
var node = new TreeNode(it.ToString(), icon, icon) {Tag = $"{constrDecl}@{it.LineFrom}"};
164-
nodes.Add(node);
156+
nodes.Add(FormHelper.CreateTreeNode(inFile, isHaxe, it));
165157
}
166158
if ((searchIsNotEmpty && SelectedNode == null || currentClass) && nodes.Count > 0)
167159
tree.SelectedNode = nodes[0];
@@ -174,13 +166,13 @@ protected override void Navigate()
174166

175167
protected override void ShowContextMenu()
176168
{
177-
if (!(SelectedNode is TypeNode)) return;
169+
if (!(SelectedNode is ClassNode)) return;
178170
ShowContextMenu(new Point(SelectedNode.Bounds.X, SelectedNode.Bounds.Bottom));
179171
}
180172

181173
protected override void ShowContextMenu(Point position)
182174
{
183-
if (!(SelectedNode is TypeNode)) return;
175+
if (!(SelectedNode is ClassNode)) return;
184176
contextMenu.Items.Clear();
185177
contextMenu.Items.Add(QuickContextMenuItem.ShowInClassHierarchyMenuItem);
186178
contextMenu.Show(tree, position);
@@ -231,6 +223,12 @@ void RefreshFilterTip(Button filter)
231223

232224
#region Event Handlers
233225

226+
protected override void OnShown(EventArgs e)
227+
{
228+
base.OnShown(e);
229+
if (Settings != null && Settings.QuickOutlineSize.Width > MinimumSize.Width) Size = Settings.QuickOutlineSize;
230+
}
231+
234232
protected override void OnKeyDown(KeyEventArgs e)
235233
{
236234
var keyCode = e.KeyCode;
@@ -262,7 +260,7 @@ protected override void OnKeyDown(KeyEventArgs e)
262260
}
263261
}
264262

265-
protected override void OnFormClosing(FormClosingEventArgs e) => settings.QuickOutlineSize = Size;
263+
protected override void OnFormClosing(FormClosingEventArgs e) => Settings.QuickOutlineSize = Size;
266264

267265
void OnInputTextChanged(object sender, EventArgs e) => RefreshTree();
268266

@@ -337,7 +335,7 @@ void OnInputKeyDown(object sender, KeyEventArgs e)
337335
protected override void OnTreeNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
338336
{
339337
if (e.Button != MouseButtons.Right) return;
340-
TreeNode node = e.Node as TypeNode;
338+
TreeNode node = e.Node as ClassNode;
341339
if (node == null || (string) node.Tag != "class") return;
342340
tree.SelectedNode = node;
343341
ShowContextMenu(new Point(e.Location.X, node.Bounds.Bottom));
@@ -364,7 +362,7 @@ void OnTreeDrawNode(object sender, DrawTreeNodeEventArgs e)
364362
graphics.FillRectangle(new SolidBrush(fillBrush), x, bounds.Y, itemWidth, tree.ItemHeight);
365363
var text = e.Node.Text;
366364
graphics.DrawString(text, font, new SolidBrush(textBrush), bounds.Left, bounds.Top, StringFormat.GenericDefault);
367-
var node = e.Node as TypeNode;
365+
var node = e.Node as ClassNode;
368366
if (node == null) return;
369367
if (!string.IsNullOrEmpty(node.In))
370368
{

0 commit comments

Comments
 (0)