AutocompleteBase.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #nullable disable
  2. using System.Collections.ObjectModel;
  3. namespace Terminal.Gui.Views;
  4. /// <summary>
  5. /// Abstract implementation of <see cref="IAutocomplete"/> allows for tailoring how autocomplete is
  6. /// rendered/interacted with.
  7. /// </summary>
  8. public abstract class AutocompleteBase : IAutocomplete
  9. {
  10. /// <inheritdoc/>
  11. public abstract View HostControl { get; set; }
  12. /// <inheritdoc/>
  13. public bool PopupInsideContainer { get; set; }
  14. /// <inheritdoc/>
  15. public ISuggestionGenerator SuggestionGenerator { get; set; } = new SingleWordSuggestionGenerator ();
  16. /// <inheritdoc/>
  17. public virtual int MaxWidth { get; set; } = 10;
  18. /// <inheritdoc/>
  19. public virtual int MaxHeight { get; set; } = 6;
  20. /// <inheritdoc/>
  21. /// <inheritdoc/>
  22. public virtual bool Visible { get; set; }
  23. /// <inheritdoc/>
  24. public virtual ReadOnlyCollection<Suggestion> Suggestions { get; set; } = new (new Suggestion [0]);
  25. /// <inheritdoc/>
  26. public virtual int SelectedIdx { get; set; }
  27. /// <inheritdoc/>
  28. public abstract Scheme Scheme { get; set; }
  29. /// <inheritdoc/>
  30. public virtual Key SelectionKey { get; set; } = Key.Enter;
  31. /// <inheritdoc/>
  32. public virtual Key CloseKey { get; set; } = Key.Esc;
  33. /// <inheritdoc/>
  34. public virtual Key Reopen { get; set; } = Key.Space.WithShift;
  35. /// <inheritdoc/>
  36. public virtual AutocompleteContext Context { get; set; }
  37. /// <inheritdoc/>
  38. public abstract bool OnMouseEvent (MouseEventArgs me, bool fromHost = false);
  39. /// <inheritdoc/>
  40. public abstract bool ProcessKey (Key a);
  41. /// <inheritdoc/>
  42. public abstract void RenderOverlay (Point renderAt);
  43. /// <inheritdoc/>
  44. /// >
  45. public virtual void ClearSuggestions () { Suggestions = Enumerable.Empty<Suggestion> ().ToList ().AsReadOnly (); }
  46. /// <inheritdoc/>
  47. public virtual void GenerateSuggestions (AutocompleteContext context)
  48. {
  49. Suggestions = SuggestionGenerator.GenerateSuggestions (context).ToList ().AsReadOnly ();
  50. EnsureSelectedIdxIsValid ();
  51. }
  52. /// <summary>Updates <see cref="SelectedIdx"/> to be a valid index within <see cref="Suggestions"/></summary>
  53. public virtual void EnsureSelectedIdxIsValid () { SelectedIdx = Math.Max (0, Math.Min (Suggestions.Count - 1, SelectedIdx)); }
  54. }