SceneManagerDirectoryPane.cs 3.7 KB

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