InspectableFieldLayout.cs 2.8 KB

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