Skip to content

Commit

Permalink
+ Added static member and instance member filter to Symbol List
Browse files Browse the repository at this point in the history
  • Loading branch information
wmjordan committed Sep 15, 2021
1 parent 34894af commit 5f8d8ed
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 3 deletions.
80 changes: 77 additions & 3 deletions Codist/Controls/SymbolFilters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,10 @@ public SymbolFilterBox(ISymbolFilterable filter) {
_FilterGroups = new FilterButtonGroup[] { new AccessibilityFilterButtonGroup(), new TypeFilterButtonGroup() };
break;
case SymbolFilterKind.Usage:
_FilterGroups = new FilterButtonGroup[] { new AccessibilityFilterButtonGroup(), new SymbolUsageFilterButtonGroup(), new MemberFilterButtonGroup() };
_FilterGroups = new FilterButtonGroup[] { new AccessibilityFilterButtonGroup(), new InstanceFilterButtonGroup(), new SymbolUsageFilterButtonGroup(), new MemberFilterButtonGroup() };
break;
default:
_FilterGroups = new FilterButtonGroup[] { new AccessibilityFilterButtonGroup(), new MemberFilterButtonGroup() };
_FilterGroups = new FilterButtonGroup[] { new AccessibilityFilterButtonGroup(), new InstanceFilterButtonGroup(), new MemberFilterButtonGroup() };
break;
}
_FilterContainer.Add(_FilterGroups)
Expand Down Expand Up @@ -292,6 +292,7 @@ internal static bool FilterBySymbol(MemberFilterTypes filterTypes, ISymbol symbo
case SymbolKind.Namespace: symbolFlags |= MemberFilterTypes.TypeAndNamespace; break;
case SymbolKind.Property: symbolFlags |= MemberFilterTypes.Property; break;
}
symbolFlags |= symbol.IsStatic ? MemberFilterTypes.Static : MemberFilterTypes.Instance;
return filterTypes.MatchFlags(symbolFlags);
}

Expand Down Expand Up @@ -674,6 +675,76 @@ public override void ClearFilter() {
}
}

sealed class InstanceFilterButtonGroup : FilterButtonGroup
{
readonly ThemedToggleButton _StaticMemberFilter, _InstanceMemberFilter;
readonly Border _Separator;
MemberFilterTypes _Filters;
bool _uiLock;

public override int Filters => (int)_Filters;

public InstanceFilterButtonGroup() {
_StaticMemberFilter = CreateButton(IconIds.StaticMember, R.T_Static);
_InstanceMemberFilter = CreateButton(IconIds.InstanceMember, R.T_Instance);

_Filters = MemberFilterTypes.AllInstance;
Content = new StackPanel {
Children = {
_StaticMemberFilter, _InstanceMemberFilter,
(_Separator = CreateSeparator())
},
Orientation = Orientation.Horizontal
};
}

protected override void UpdateFilterValue() {
if (_uiLock) {
return;
}
var f = MemberFilterTypes.None;
if (_InstanceMemberFilter.IsChecked == true) {
f |= MemberFilterTypes.Instance;
}
if (_StaticMemberFilter.IsChecked == true) {
f |= MemberFilterTypes.Static;
}
if (f.HasAnyFlag(MemberFilterTypes.AllInstance) == false) {
f |= MemberFilterTypes.AllInstance;
}
if (_Filters != f) {
_Filters = f;
OnFilterChanged();
}
}

public override void UpdateNumbers(IEnumerable<SymbolItem> symbols) {
int i = 0, s = 0;
foreach (var item in symbols) {
var symbol = item.Symbol;
if (symbol == null || symbol.IsImplicitlyDeclared) {
continue;
}
if (symbol.IsStatic) {
s++;
}
else {
i++;
}
}
ToggleFilterButton(_StaticMemberFilter, s);
ToggleFilterButton(_InstanceMemberFilter, i);
_Separator.Visibility = (i != 0 || s != 0) ? Visibility.Visible : Visibility.Collapsed;
}

public override void ClearFilter() {
_uiLock = true;
_InstanceMemberFilter.IsChecked = _StaticMemberFilter.IsChecked = false;
_uiLock = false;
_Filters |= MemberFilterTypes.AllMembers;
}
}

sealed class SymbolUsageFilterButtonGroup : FilterButtonGroup
{
readonly ThemedToggleButton _WriteFilter, _ReadFilter, _EventFilter, _TypeCastFilter, _TypeReferenceFilter;
Expand Down Expand Up @@ -877,12 +948,15 @@ enum MemberFilterTypes
Interface = 1 << 14,
Namespace = 1 << 15,
AllTypes = Class | StructAndEnum | Delegate| Interface | Namespace,
Static = 1 << 17,
Instance = 1 << 18,
AllInstance = Static | Instance,
Read = 1 << 20,
Write = 1 << 21,
TypeCast = 1 << 22,
TypeReference = 1 << 23,
AllUsages = Read | Write | TypeCast | TypeReference,
All = AllMembers | AllAccessibilities | AllTypes | AllUsages
All = AllMembers | AllAccessibilities | AllTypes | AllInstance | AllUsages
}

enum ScopeType
Expand Down
1 change: 1 addition & 0 deletions Codist/IconIds.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ static class IconIds
public const int Generic = KnownImageIds.MarkupXML;
public const int ExtensionMethod = KnownImageIds.ExtensionMethod;
public const int StaticMember = KnownImageIds.Link;
public const int InstanceMember = KnownImageIds.BuildQueue;
public const int ReadonlyField = KnownImageIds.EncapsulateField;
public const int ReadonlyProperty = KnownImageIds.MoveProperty;
public const int InitonlyProperty = KnownImageIds.NewProperty;
Expand Down
18 changes: 18 additions & 0 deletions Codist/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions Codist/Properties/Resources.en-US.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1797,4 +1797,10 @@ Use space to separate multiple search terms.
<data name="T_Hexadecimal" xml:space="preserve">
<value>HEX</value>
</data>
<data name="T_Instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="T_Static" xml:space="preserve">
<value>Static</value>
</data>
</root>
6 changes: 6 additions & 0 deletions Codist/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1797,4 +1797,10 @@ Use space to separate multiple search terms.
<data name="T_Hexadecimal" xml:space="preserve">
<value>HEX</value>
</data>
<data name="T_Instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="T_Static" xml:space="preserve">
<value>Static</value>
</data>
</root>
6 changes: 6 additions & 0 deletions Codist/Properties/Resources.zh-Hans.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1785,4 +1785,10 @@ Ctrl+1, Ctrl+3: Edit.SearchDeclarationInProject</value>
<data name="T_Hexadecimal" xml:space="preserve">
<value>16进制</value>
</data>
<data name="T_Instance" xml:space="preserve">
<value>实例成员</value>
</data>
<data name="T_Static" xml:space="preserve">
<value>静态成员</value>
</data>
</root>

0 comments on commit 5f8d8ed

Please sign in to comment.