MpnAttachPropPane.cs 3.7 KB

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