InspectableFieldLayout.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Collections.Generic;
  2. using BansheeEngine;
  3. namespace BansheeEditor
  4. {
  5. /// <summary>
  6. /// Helper layout object that wraps a standard <see cref="GUILayout"/>, used primarily by <see cref="InspectableField"/>
  7. /// implementations keep track of their own GUI elements in a layout.
  8. /// </summary>
  9. public class InspectableFieldLayout
  10. {
  11. private GUILayoutY parentLayout;
  12. private List<GUIElement> elements = new List<GUIElement>();
  13. /// <summary>
  14. /// Creates a new inspectable field layout object.
  15. /// </summary>
  16. /// <param name="parentLayout">GUI layout object to wrap.</param>
  17. public InspectableFieldLayout(GUILayoutY parentLayout)
  18. {
  19. this.parentLayout = parentLayout;
  20. }
  21. /// <summary>
  22. /// Number of child elements in the inspectable layout.
  23. /// </summary>
  24. public int NumElements
  25. {
  26. get { return elements.Count; }
  27. }
  28. /// <summary>
  29. /// Adds a GUI element to the field layout.
  30. /// </summary>
  31. /// <param name="index">Index into the GUI layout at which the field layout start at.</param>
  32. /// <param name="element">GUI element to insert into the layout.</param>
  33. public void AddElement(int index, GUIElement element)
  34. {
  35. parentLayout.InsertElement(index + elements.Count, element);
  36. elements.Add(element);
  37. }
  38. /// <summary>
  39. /// Creates a new <see cref="GUILayoutX"/> and adds it to the field layout.
  40. /// </summary>
  41. /// <param name="index">Index into the GUI layout at which the field layout start at.</param>
  42. /// <returns>Newly created layout.</returns>
  43. public GUILayoutX AddLayoutX(int index)
  44. {
  45. GUILayoutX layout = parentLayout.InsertLayoutX(index + elements.Count);
  46. elements.Add(layout);
  47. return layout;
  48. }
  49. /// <summary>
  50. /// Creates a new <see cref="GUILayoutY"/> and adds it to the field layout.
  51. /// </summary>
  52. /// <param name="index">Index into the GUI layout at which the field layout start at.</param>
  53. /// <returns>Newly created layout.</returns>
  54. public GUILayoutY AddLayoutY(int index)
  55. {
  56. GUILayoutY layout = parentLayout.InsertLayoutY(index + elements.Count);
  57. elements.Add(layout);
  58. return layout;
  59. }
  60. /// <summary>
  61. /// Destroys all GUI elements contained in the field layout. Leaves other elements present in GUI layout intact.
  62. /// </summary>
  63. public void DestroyElements()
  64. {
  65. foreach (var element in elements)
  66. {
  67. element.Destroy();
  68. }
  69. elements.Clear();
  70. }
  71. }
  72. }