You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
4.5 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using CustomUI.BeatSaber;
  4. using CustomUI.Utilities;
  5. using HMUI;
  6. using IPA.Loader;
  7. using IPA.Old;
  8. using UnityEngine;
  9. namespace BSIPA_ModList.UI
  10. {
  11. internal class ModListController : CustomListViewController
  12. {
  13. private interface IClickableCell
  14. {
  15. void OnSelect(ModListController cntrl);
  16. }
  17. private class BSIPAModCell : CustomCellInfo, IClickableCell
  18. {
  19. private static Sprite _defaultIcon;
  20. public static Sprite DefaultIcon
  21. {
  22. get
  23. {
  24. if (_defaultIcon == null)
  25. _defaultIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.mod_bsipa.png");
  26. return _defaultIcon;
  27. }
  28. }
  29. internal PluginLoader.PluginInfo Plugin;
  30. public BSIPAModCell(PluginLoader.PluginInfo plugin)
  31. : base($"{plugin.Metadata.Name} <size=60%>v{plugin.Metadata.Version}", plugin.Metadata.Manifest.Author, null)
  32. {
  33. Plugin = plugin;
  34. if (plugin.Metadata.Manifest.IconPath != null)
  35. icon = UIUtilities.LoadSpriteRaw(UIUtilities.GetResource(plugin.Metadata.Assembly, plugin.Metadata.Manifest.IconPath));
  36. else
  37. icon = DefaultIcon;
  38. Logger.log.Debug($"BSIPAModCell {plugin.Metadata.Name} {plugin.Metadata.Version}");
  39. }
  40. public void OnSelect(ModListController cntrl)
  41. {
  42. Logger.log.Debug($"Selected BSIPAModCell {Plugin.Metadata.Name} {Plugin.Metadata.Version}");
  43. }
  44. }
  45. private class BSIPAIgnoredModCell : CustomCellInfo, IClickableCell
  46. {
  47. internal PluginLoader.PluginMetadata Plugin;
  48. public BSIPAIgnoredModCell(PluginLoader.PluginMetadata plugin)
  49. : base($"<color=#878787>{plugin.Name} <size=60%>v{plugin.Version}", $"{plugin.Manifest.Author} <color=#BFBFBF>- <i>Not loaded</i>", BSIPAModCell.DefaultIcon)
  50. {
  51. Plugin = plugin;
  52. Logger.log.Debug($"BSIPAIgnoredModCell {plugin.Name} {plugin.Version}");
  53. }
  54. public void OnSelect(ModListController cntrl)
  55. {
  56. Logger.log.Debug($"Selected BSIPAIgnoredModCell {Plugin.Name} {Plugin.Version}");
  57. }
  58. }
  59. #pragma warning disable CS0618
  60. private class IPAModCell : CustomCellInfo, IClickableCell
  61. {
  62. private static Sprite _defaultIcon;
  63. public static Sprite DefaultIcon
  64. {
  65. get
  66. {
  67. if (_defaultIcon == null)
  68. _defaultIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.mod_ipa.png");
  69. return _defaultIcon;
  70. }
  71. }
  72. internal IPlugin Plugin;
  73. public IPAModCell(IPlugin plugin)
  74. : base($"{plugin.Name} <size=60%>{plugin.Version}", "<color=#BFBFBF><i>Legacy</i>", DefaultIcon)
  75. {
  76. Plugin = plugin;
  77. Logger.log.Debug($"IPAModCell {plugin.Name} {plugin.Version}");
  78. }
  79. public void OnSelect(ModListController cntrl)
  80. {
  81. Logger.log.Debug($"Selected IPAModCell {Plugin.Name} {Plugin.Version}");
  82. }
  83. }
  84. #pragma warning restore
  85. #pragma warning disable CS0618
  86. public void Init(IEnumerable<PluginLoader.PluginInfo> bsipaPlugins, IEnumerable<PluginLoader.PluginMetadata> ignoredPlugins, IEnumerable<IPlugin> ipaPlugins)
  87. {
  88. Logger.log.Debug("List Controller Init");
  89. DidActivateEvent = DidActivate;
  90. DidSelectRowEvent = DidSelectRow;
  91. includePageButtons = true;
  92. reuseIdentifier = "BSIPAModListTableCell";
  93. foreach (var plugin in bsipaPlugins)
  94. Data.Add(new BSIPAModCell(plugin));
  95. foreach (var plugin in ignoredPlugins)
  96. Data.Add(new BSIPAIgnoredModCell(plugin));
  97. foreach (var plugin in ipaPlugins)
  98. Data.Add(new IPAModCell(plugin));
  99. }
  100. #pragma warning restore
  101. private void DidSelectRow(TableView view, int index)
  102. {
  103. Debug.Assert(ReferenceEquals(view.dataSource, this));
  104. (Data[index] as IClickableCell)?.OnSelect(this);
  105. }
  106. private new void DidActivate(bool first, ActivationType type)
  107. {
  108. }
  109. }
  110. }