MpnAttachPropPane.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using UnityEngine;
  4. namespace MeidoPhotoStudio.Plugin;
  5. public class MpnAttachPropPane : BasePane
  6. {
  7. private readonly MeidoManager meidoManager;
  8. private readonly Dropdown mpnAttachDropdown;
  9. private readonly Button previousPropButton;
  10. private readonly Button nextPropButton;
  11. private readonly Button attachPropButton;
  12. private readonly Button detachPropButton;
  13. private readonly Button detachAllButton;
  14. private string header;
  15. public MpnAttachPropPane(MeidoManager meidoManager)
  16. {
  17. this.meidoManager = meidoManager;
  18. mpnAttachDropdown = new(new[] { string.Empty });
  19. if (!Constants.MpnAttachInitialized)
  20. Constants.MenuFilesChange += InitializeMpnAttach;
  21. SetDropdownList();
  22. previousPropButton = new("<");
  23. previousPropButton.ControlEvent += (_, _) =>
  24. mpnAttachDropdown.Step(-1);
  25. nextPropButton = new(">");
  26. nextPropButton.ControlEvent += (_, _) =>
  27. mpnAttachDropdown.Step(1);
  28. attachPropButton = new(Translation.Get("attachMpnPropPane", "attachButton"));
  29. attachPropButton.ControlEvent += (_, _) =>
  30. AttachProp();
  31. detachPropButton = new(Translation.Get("attachMpnPropPane", "detachButton"));
  32. detachPropButton.ControlEvent += (_, _) =>
  33. AttachProp(detach: true);
  34. detachAllButton = new(Translation.Get("attachMpnPropPane", "detachAllButton"));
  35. detachAllButton.ControlEvent += (_, _) =>
  36. DetachAll();
  37. header = Translation.Get("attachMpnPropPane", "header");
  38. }
  39. public override void Draw()
  40. {
  41. GUI.enabled = meidoManager.HasActiveMeido && Constants.MpnAttachInitialized;
  42. var noExpand = GUILayout.ExpandWidth(false);
  43. MpsGui.Header(header);
  44. MpsGui.WhiteLine();
  45. GUILayout.BeginHorizontal();
  46. previousPropButton.Draw(noExpand);
  47. mpnAttachDropdown.Draw(GUILayout.Width(153f));
  48. nextPropButton.Draw(noExpand);
  49. GUILayout.EndHorizontal();
  50. GUILayout.BeginHorizontal();
  51. attachPropButton.Draw();
  52. detachPropButton.Draw();
  53. GUILayout.EndHorizontal();
  54. detachAllButton.Draw();
  55. GUI.enabled = true;
  56. }
  57. protected override void ReloadTranslation()
  58. {
  59. attachPropButton.Label = Translation.Get("attachMpnPropPane", "attachButton");
  60. detachPropButton.Label = Translation.Get("attachMpnPropPane", "detachButton");
  61. detachAllButton.Label = Translation.Get("attachMpnPropPane", "detachAllButton");
  62. header = Translation.Get("attachMpnPropPane", "header");
  63. SetDropdownList();
  64. }
  65. private void InitializeMpnAttach(object sender, MenuFilesEventArgs args)
  66. {
  67. if (args.Type is MenuFilesEventArgs.EventType.MpnAttach)
  68. SetDropdownList();
  69. }
  70. private void SetDropdownList()
  71. {
  72. IEnumerable<string> dropdownList = !Constants.MpnAttachInitialized
  73. ? new[] { Translation.Get("systemMessage", "initializing") }
  74. : Translation.GetArray(
  75. "mpnAttachPropNames", Constants.MpnAttachPropList.Select(mpnProp => mpnProp.MenuFile));
  76. mpnAttachDropdown.SetDropdownItems(dropdownList.ToArray());
  77. }
  78. private void AttachProp(bool detach = false)
  79. {
  80. if (!meidoManager.HasActiveMeido)
  81. return;
  82. var prop = Constants.MpnAttachPropList[mpnAttachDropdown.SelectedItemIndex];
  83. meidoManager.ActiveMeido.SetMpnProp(prop, detach);
  84. }
  85. private void DetachAll()
  86. {
  87. if (!meidoManager.HasActiveMeido)
  88. return;
  89. meidoManager.ActiveMeido.DetachAllMpnAttach();
  90. }
  91. }