Skip to content

Commit ce81341

Browse files
committed
Set UpdateTimer interval to 500ms.
- Set UpdateTimer.Interval to 500ms. Properly Stop and Start it on TextChanged. - Refactored NavigationBar - Extracted out TreeNode classes. - Extracted out Item Renderering. - Extracted out Node Searching. - Extracted out Building the DropDowns. - Extracted out navigating to a MemberTreeNode.
1 parent 515b288 commit ce81341

15 files changed

+901
-885
lines changed

Controls/ClassTreeNode.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using ASCompletion.Model;
2+
3+
namespace NavigationBar.Controls
4+
{
5+
internal class ClassTreeNode : MemberTreeNode
6+
{
7+
public ClassModel ClassModel { get { return (ClassModel)Model; } }
8+
9+
public ClassTreeNode(ClassModel classModel, int imageIndex, bool showQualifiedClassNames)
10+
: base(classModel, imageIndex, false)
11+
{
12+
Text = classModel.Name;
13+
Tag = "class";
14+
Label = showQualifiedClassNames ? classModel.QualifiedName : classModel.Name;
15+
}
16+
}
17+
}

Controls/ImportTreeNode.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using ASCompletion.Model;
2+
3+
namespace NavigationBar.Controls
4+
{
5+
internal class ImportTreeNode : MemberTreeNode
6+
{
7+
public ImportTreeNode(ClassModel importModel, int imageIndex, bool showQualifiedClassNames)
8+
: base(importModel, imageIndex, false)
9+
{
10+
Text = importModel.Name;
11+
Tag = "class";
12+
Label = showQualifiedClassNames ? importModel.QualifiedName : importModel.Name;
13+
}
14+
}
15+
}

Controls/InheritedClassTreeNode.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using ASCompletion.Model;
2+
3+
namespace NavigationBar.Controls
4+
{
5+
internal class InheritedClassTreeNode : InheritedMemberTreeNode
6+
{
7+
public InheritedClassTreeNode(ClassModel classModel, int imageIndex, bool showQualifiedClassNames)
8+
: base(classModel, classModel, imageIndex, false)
9+
{
10+
Text = classModel.Name;
11+
Tag = "class";
12+
Label = showQualifiedClassNames ? classModel.QualifiedName : classModel.Name;
13+
}
14+
}
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using ASCompletion.Model;
2+
3+
namespace NavigationBar.Controls
4+
{
5+
internal class InheritedMemberTreeNode : MemberTreeNode
6+
{
7+
public InheritedMemberTreeNode(ClassModel classModel, MemberModel memberModel, int imageIndex, bool labelPropertiesLikeFunctions)
8+
: base(memberModel, imageIndex, labelPropertiesLikeFunctions)
9+
{
10+
Label = Text + " - " + classModel.Name;
11+
ClassModel = classModel;
12+
}
13+
14+
public ClassModel ClassModel { get; protected set; }
15+
}
16+
}

Controls/MemberTreeNode.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using ASCompletion.Model;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Windows.Forms;
5+
6+
namespace NavigationBar.Controls
7+
{
8+
internal class MemberTreeNode : TreeNode
9+
{
10+
public MemberModel Model { get; protected set; }
11+
public string Label { get; protected set; }
12+
13+
public MemberTreeNode(MemberModel memberModel, int imageIndex, bool labelPropertiesLikeFunctions)
14+
: base(memberModel.ToString(), imageIndex, imageIndex)
15+
{
16+
if (labelPropertiesLikeFunctions &&
17+
(memberModel.Flags & (FlagType.Setter | FlagType.Getter)) != 0)
18+
{
19+
List<string> paramList = new List<string>();
20+
if (memberModel.Parameters != null)
21+
paramList.AddRange(memberModel.Parameters.Select(param => string.Format("{0}:{1}", param.Name, param.Type)));
22+
23+
Label = string.Format("{0} ({1}) : {2}", memberModel.Name, string.Join(", ", paramList.ToArray()), memberModel.Type);
24+
}
25+
else
26+
{
27+
Label = Text;
28+
}
29+
30+
Model = memberModel;
31+
Tag = memberModel.Name + "@" + memberModel.LineFrom;
32+
}
33+
}
34+
}

Controls/MemberTreeNodeComparer.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using ASCompletion.Model;
2+
using ASCompletion.Settings;
3+
using System.Collections.Generic;
4+
5+
namespace NavigationBar.Controls
6+
{
7+
internal class MemberTreeNodeComparer : IComparer<MemberTreeNode>
8+
{
9+
private static MemberTreeNodeComparer _sortedComparer = new MemberTreeNodeComparer(null);
10+
private static MemberTreeNodeComparer _byKindComparer = new MemberTreeNodeComparer(new ByKindMemberComparer());
11+
private static MemberTreeNodeComparer _smartSortComparer = new MemberTreeNodeComparer(new SmartMemberComparer());
12+
13+
private IComparer<MemberModel> _memberModelComparer;
14+
15+
public static MemberTreeNodeComparer GetComparer(OutlineSorting outlineSort)
16+
{
17+
MemberTreeNodeComparer memberSort = null;
18+
19+
switch (outlineSort)
20+
{
21+
case OutlineSorting.Sorted:
22+
memberSort = _sortedComparer;
23+
break;
24+
case OutlineSorting.SortedByKind:
25+
case OutlineSorting.SortedGroup:
26+
memberSort = _byKindComparer;
27+
break;
28+
case OutlineSorting.SortedSmart:
29+
memberSort = _smartSortComparer;
30+
break;
31+
}
32+
33+
return memberSort;
34+
}
35+
36+
public MemberTreeNodeComparer(IComparer<MemberModel> memberModelComparer)
37+
{
38+
_memberModelComparer = memberModelComparer;
39+
}
40+
41+
public int Compare(MemberTreeNode x, MemberTreeNode y)
42+
{
43+
return _memberModelComparer != null ? _memberModelComparer.Compare(x.Model, y.Model) :
44+
x.Label.CompareTo(y.Label);
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)