InspectorWindow.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections.Generic;
  3. using BansheeEngine;
  4. namespace BansheeEditor
  5. {
  6. internal sealed class InspectorWindow : EditorWindow
  7. {
  8. private class InspectorData
  9. {
  10. public GUIComponentFoldout foldout;
  11. public GUIPanel panel;
  12. public Inspector inspector;
  13. public bool expanded = true;
  14. }
  15. private List<InspectorData> inspectorData = new List<InspectorData>();
  16. private GUIScrollArea inspectorScrollArea;
  17. private GUILayout inspectorLayout;
  18. [MenuItem("Windows/Inspector", ButtonModifier.CtrlAlt, ButtonCode.I)]
  19. private static void OpenHierarchyWindow()
  20. {
  21. OpenWindow<HierarchyWindow>();
  22. }
  23. internal void SetObjectToInspect(SceneObject so)
  24. {
  25. Clear();
  26. // TODO - Create SceneObject gui elements (name + transform)
  27. inspectorScrollArea = new GUIScrollArea();
  28. GUI.AddElement(inspectorScrollArea);
  29. inspectorLayout = inspectorScrollArea.Layout;
  30. Component[] allComponents = so.GetComponents();
  31. for (int i = 0; i < allComponents.Length; i++)
  32. {
  33. InspectorData data = new InspectorData();
  34. data.foldout = new GUIComponentFoldout(allComponents[i].GetType().Name);
  35. inspectorLayout.AddElement(data.foldout);
  36. data.panel = inspectorLayout.AddPanel();
  37. data.inspector = GetInspector(allComponents[i].GetType());
  38. data.inspector.Initialize(this, data.panel, allComponents[i]);
  39. data.foldout.SetExpanded(true);
  40. data.foldout.OnToggled += (bool expanded) => OnComponentFoldoutToggled(data, expanded);
  41. inspectorData.Add(data);
  42. inspectorData[i].inspector.Refresh();
  43. }
  44. inspectorLayout.AddFlexibleSpace();
  45. }
  46. private void OnComponentFoldoutToggled(InspectorData inspectorData, bool expanded)
  47. {
  48. inspectorData.expanded = expanded;
  49. inspectorData.inspector.SetVisible(expanded);
  50. }
  51. private void OnEditorUpdate()
  52. {
  53. for (int i = 0; i < inspectorData.Count; i++)
  54. {
  55. inspectorData[i].inspector.Refresh();
  56. }
  57. }
  58. internal void Destroy()
  59. {
  60. // TODO - Destroy SceneObject GUI elements
  61. Clear();
  62. }
  63. internal void Clear()
  64. {
  65. for (int i = 0; i < inspectorData.Count; i++)
  66. {
  67. inspectorData[i].foldout.Destroy();
  68. inspectorData[i].inspector.Destroy();
  69. }
  70. inspectorData.Clear();
  71. if (inspectorScrollArea != null)
  72. {
  73. inspectorScrollArea.Destroy();
  74. inspectorScrollArea = null;
  75. }
  76. }
  77. private Inspector GetInspector(Type type)
  78. {
  79. // TODO - Check if type has a custom inspector
  80. // and return the custom inspector, otherwise create a generic one
  81. return new GenericInspector();
  82. }
  83. }
  84. }