AutocompleteBase.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Text;
  6. using Rune = System.Rune;
  7. namespace Terminal.Gui {
  8. public abstract class AutocompleteBase : IAutocomplete {
  9. /// <inheritdoc/>
  10. public abstract View HostControl { get; set; }
  11. /// <inheritdoc/>
  12. public bool PopupInsideContainer { get; set; }
  13. public ISuggestionGenerator SuggestionGenerator { get; set; } = new SingleWordSuggestionGenerator ();
  14. /// <inheritdoc/>
  15. public virtual int MaxWidth { get; set; } = 10;
  16. /// <inheritdoc/>
  17. public virtual int MaxHeight { get; set; } = 6;
  18. /// <inheritdoc/>
  19. /// <inheritdoc/>
  20. public virtual bool Visible { get; set; }
  21. /// <inheritdoc/>
  22. public virtual ReadOnlyCollection<Suggestion> Suggestions { get; set; } = new ReadOnlyCollection<Suggestion> (new Suggestion [0]);
  23. /// <inheritdoc/>
  24. public virtual int SelectedIdx { get; set; }
  25. /// <inheritdoc/>
  26. public abstract ColorScheme ColorScheme { get; set; }
  27. /// <inheritdoc/>
  28. public virtual Key SelectionKey { get; set; } = Key.Enter;
  29. /// <inheritdoc/>
  30. public virtual Key CloseKey { get; set; } = Key.Esc;
  31. /// <inheritdoc/>
  32. public virtual Key Reopen { get; set; } = Key.Space | Key.CtrlMask | Key.AltMask;
  33. /// <inheritdoc/>
  34. public abstract bool MouseEvent (MouseEvent me, bool fromHost = false);
  35. /// <inheritdoc/>
  36. public abstract bool ProcessKey (KeyEvent kb);
  37. /// <inheritdoc/>
  38. public abstract void RenderOverlay (Point renderAt);
  39. /// <inheritdoc/>>
  40. public virtual void ClearSuggestions ()
  41. {
  42. Suggestions = Enumerable.Empty<Suggestion> ().ToList ().AsReadOnly ();
  43. }
  44. /// <inheritdoc/>
  45. public virtual void GenerateSuggestions (List<Rune> currentLine, int idx)
  46. {
  47. Suggestions = SuggestionGenerator.GenerateSuggestions (currentLine, idx).ToList ().AsReadOnly ();
  48. EnsureSelectedIdxIsValid ();
  49. }
  50. /// <summary>
  51. /// Updates <see cref="SelectedIdx"/> to be a valid index within <see cref="Suggestions"/>
  52. /// </summary>
  53. public virtual void EnsureSelectedIdxIsValid ()
  54. {
  55. SelectedIdx = Math.Max (0, Math.Min (Suggestions.Count - 1, SelectedIdx));
  56. }
  57. }
  58. }