InspectableFieldLayout.cs 3.0 KB

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