SceneManagerDirectoryPane.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using UnityEngine;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public class SceneManagerDirectoryPane : BasePane
  4. {
  5. public static readonly int ListWidth = 200;
  6. private readonly SceneManager sceneManager;
  7. private readonly SceneModalWindow sceneModalWindow;
  8. private readonly Button createDirectoryButton;
  9. private readonly Button deleteDirectoryButton;
  10. private readonly TextField directoryTextField;
  11. private readonly Button cancelButton;
  12. private readonly Texture2D selectedTexture = Utility.MakeTex(2, 2, new(0.5f, 0.5f, 0.5f, 0.4f));
  13. private Vector2 listScrollPos;
  14. private bool createDirectoryMode;
  15. public SceneManagerDirectoryPane(SceneManager sceneManager, SceneModalWindow sceneModalWindow)
  16. {
  17. this.sceneManager = sceneManager;
  18. this.sceneModalWindow = sceneModalWindow;
  19. createDirectoryButton = new(Translation.Get("sceneManager", "createDirectoryButton"));
  20. createDirectoryButton.ControlEvent += (_, _) =>
  21. createDirectoryMode = true;
  22. deleteDirectoryButton = new(Translation.Get("sceneManager", "deleteDirectoryButton"));
  23. deleteDirectoryButton.ControlEvent += (_, _) =>
  24. this.sceneModalWindow.ShowDirectoryDialogue();
  25. directoryTextField = new();
  26. directoryTextField.ControlEvent += (_, _) =>
  27. {
  28. sceneManager.AddDirectory(directoryTextField.Value);
  29. createDirectoryMode = false;
  30. directoryTextField.Value = string.Empty;
  31. };
  32. cancelButton = new("X");
  33. cancelButton.ControlEvent += (_, _) =>
  34. createDirectoryMode = false;
  35. }
  36. public override void Draw()
  37. {
  38. var directoryStyle = new GUIStyle(GUI.skin.button)
  39. {
  40. fontSize = Utility.GetPix(12),
  41. alignment = TextAnchor.MiddleLeft,
  42. margin = new(0, 0, 0, 0),
  43. };
  44. var directorySelectedStyle = new GUIStyle(directoryStyle);
  45. directorySelectedStyle.normal.textColor = Color.white;
  46. directorySelectedStyle.normal.background = selectedTexture;
  47. directorySelectedStyle.hover.background = selectedTexture;
  48. GUILayout.BeginVertical(GUILayout.Width(Utility.GetPix(ListWidth)));
  49. listScrollPos = GUILayout.BeginScrollView(listScrollPos);
  50. for (var i = 0; i < sceneManager.CurrentDirectoryList.Count; i++)
  51. {
  52. var style = i == sceneManager.CurrentDirectoryIndex ? directorySelectedStyle : directoryStyle;
  53. var directoryName = sceneManager.CurrentDirectoryList[i];
  54. if (GUILayout.Button(directoryName, style, GUILayout.Height(Utility.GetPix(20))))
  55. sceneManager.SelectDirectory(i);
  56. }
  57. GUILayout.EndScrollView();
  58. GUILayout.BeginHorizontal();
  59. var buttonStyle = new GUIStyle(GUI.skin.button)
  60. {
  61. fontSize = Utility.GetPix(12),
  62. };
  63. var buttonHeight = GUILayout.Height(Utility.GetPix(20));
  64. if (createDirectoryMode)
  65. {
  66. directoryTextField.Draw(buttonHeight, GUILayout.Width(Utility.GetPix(ListWidth - 30)));
  67. cancelButton.Draw(buttonStyle, buttonHeight, GUILayout.ExpandWidth(false));
  68. }
  69. else
  70. {
  71. createDirectoryButton.Draw(buttonStyle, buttonHeight);
  72. GUI.enabled = sceneManager.CurrentDirectoryIndex > 0;
  73. deleteDirectoryButton.Draw(buttonStyle, buttonHeight, GUILayout.ExpandWidth(false));
  74. GUI.enabled = true;
  75. }
  76. GUILayout.EndHorizontal();
  77. GUILayout.EndVertical();
  78. }
  79. protected override void ReloadTranslation()
  80. {
  81. createDirectoryButton.Label = Translation.Get("sceneManager", "createDirectoryButton");
  82. deleteDirectoryButton.Label = Translation.Get("sceneManager", "deleteDirectoryButton");
  83. }
  84. }