private void InitializeComponent() { AvaloniaXamlLoader.Load(this); CompletionListControl = new CompletionListControl(this); this.FindControl <ScrollViewer>("ItemsScrollViewer").Content = CompletionListControl; }
public async Task SetSelectedIndex(int index) { CompletionListControl.SelectedIndex = index; CompletionListControl.InvalidateVisual(); if (!UpdatingItems && CompletionListControl.SelectedIndex >= 0) { if (!CompletionListControl.Hidden[CompletionListControl.SelectedIndex]) { CompletionItem item = CompletionListControl.Items[CompletionListControl.SelectedIndex].item; await GetSymbolComments(item); } else { this.FindControl <Border>("DocumentationBorder").IsVisible = false; await UpdateScrollViewer(); } } }
private async Task UpdateFilter() { bool[] filters = new bool[FilterButtons.Count]; for (int i = 0; i < FilterButtons.Count; i++) { filters[i] = FilterButtons[i].IsVisible && FilterButtons[i].IsChecked == true; } bool[] foundFilters = new bool[FilterButtons.Count]; bool[] foundButFilteredFilters = new bool[FilterButtons.Count]; CompletionListControl.Filter = FilterText; string filter = FilterText?.Trim(); int index = 0; int firstVisibleIndex = -1; int visibleCount = 0; int firstExactMatch = -1; if (!filters.Any(a => a)) { for (int i = 0; i < filters.Length; i++) { filters[i] = true; } } for (int i = 0; i < CompletionListControl.Items.Count; i++) { CompletionItem item = CompletionListControl.Items[i].item; int foundIndex = -1; if (item.Properties.ContainsKey("SymbolKind")) { switch ((SymbolKind)(int.Parse(item.Properties["SymbolKind"]))) { case SymbolKind.Property: CompletionListControl.Hidden[i] = !filters[8]; foundIndex = 8; break; case SymbolKind.Event: CompletionListControl.Hidden[i] = !filters[7]; foundIndex = 7; break; case SymbolKind.Field: CompletionListControl.Hidden[i] = !filters[6]; foundIndex = 6; break; case SymbolKind.Method: CompletionListControl.Hidden[i] = !filters[9]; foundIndex = 9; break; case SymbolKind.NamedType: case SymbolKind.DynamicType: case SymbolKind.ArrayType: case SymbolKind.PointerType: if (item.Tags.Contains(WellKnownTags.Class)) { CompletionListControl.Hidden[i] = !filters[1]; foundIndex = 1; } else if (item.Tags.Contains(WellKnownTags.Delegate)) { CompletionListControl.Hidden[i] = !filters[5]; foundIndex = 5; } else if (item.Tags.Contains(WellKnownTags.Enum)) { CompletionListControl.Hidden[i] = !filters[4]; foundIndex = 4; } else if (item.Tags.Contains(WellKnownTags.Structure)) { CompletionListControl.Hidden[i] = !filters[2]; foundIndex = 2; } else if (item.Tags.Contains(WellKnownTags.Interface)) { CompletionListControl.Hidden[i] = !filters[3]; foundIndex = 3; } else { CompletionListControl.Hidden[i] = !filters[12]; foundIndex = 12; } break; case SymbolKind.Namespace: CompletionListControl.Hidden[i] = !filters[0]; foundIndex = 0; break; case SymbolKind.Local: case SymbolKind.Parameter: CompletionListControl.Hidden[i] = !filters[10]; foundIndex = 10; break; default: CompletionListControl.Hidden[i] = !filters[12]; foundIndex = 12; break; } } else if (item.Tags.Contains(WellKnownTags.Keyword)) { CompletionListControl.Hidden[i] = !filters[11]; foundIndex = 11; } else if (item.Tags.Contains(WellKnownTags.Local) || item.Tags.Contains(WellKnownTags.Parameter)) { CompletionListControl.Hidden[i] = !filters[10]; foundIndex = 10; } else if (item.Tags.Contains(WellKnownTags.Class)) { CompletionListControl.Hidden[i] = !filters[1]; foundIndex = 1; } else if (item.Tags.Contains(WellKnownTags.Enum)) { CompletionListControl.Hidden[i] = !filters[4]; foundIndex = 4; } else { CompletionListControl.Hidden[i] = !filters[12]; foundIndex = 12; } if (string.IsNullOrEmpty(filter)) { foundButFilteredFilters[foundIndex] = true; //CompletionListControl.Hidden[i] |= false; } else if (item.FilterText.StartsWith(filter, StringComparison.OrdinalIgnoreCase)) { foundButFilteredFilters[foundIndex] = true; //CompletionListControl.Hidden[i] |= false; } else { CompletionListControl.Hidden[i] = true; } if (!CompletionListControl.Hidden[i]) { foundFilters[foundIndex] = true; } if (firstVisibleIndex < 0 && !CompletionListControl.Hidden[i]) { firstVisibleIndex = index; } if (!CompletionListControl.Hidden[i]) { visibleCount++; if (!string.IsNullOrEmpty(filter) && item.FilterText.StartsWith(filter) && firstExactMatch < 0) { firstExactMatch = index; } } index++; } for (int i = 0; i < foundFilters.Length; i++) { ((Control)this.FindControl <StackPanel>("FilterContainer").Children[i]).IsEnabled = foundFilters[i] || foundButFilteredFilters[i]; if (((Control)this.FindControl <StackPanel>("FilterContainer").Children[i]).IsEnabled) { ((Control)this.FindControl <StackPanel>("FilterContainer").Children[i]).Opacity = 1; } else { ((Control)this.FindControl <StackPanel>("FilterContainer").Children[i]).Opacity = 0.25; } } if ((SelectedIndex < 0 || (filter != null && !CompletionListControl.Items[CompletionListControl.SelectedIndex].item.FilterText.StartsWith(filter))) && firstExactMatch > 0) { await SetSelectedIndex(firstExactMatch); } else if ((SelectedIndex < 0 || CompletionListControl.Hidden[CompletionListControl.SelectedIndex]) && firstVisibleIndex >= 0) { await SetSelectedIndex(firstVisibleIndex); } if (!AnchorOnTop) { this.Height = Math.Min(this.MaxWindowHeight, visibleCount * 20 + 33); } else { this.Height = Math.Min(this.MaxWindowHeight, visibleCount * 20 + 33); double prevX = ((TranslateTransform)this.RenderTransform).X; this.RenderTransform = new TranslateTransform(prevX, this.TopAnchor - this.Height); } VisibleItems = visibleCount; await UpdateScrollViewer(); if (visibleCount == 0) { this.IsVisible = false; } CompletionListControl.InvalidateMeasure(); await SetSelectedIndex(SelectedIndex); }