GUIWidgetInspector.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using BansheeEngine;
  2. namespace BansheeEditor
  3. {
  4. /// <summary>
  5. /// Renders an inspector for the <see cref="GUIWidget"/> component.
  6. /// </summary>
  7. [CustomInspector(typeof(GUIWidget))]
  8. internal class GUIWidgetInspector : Inspector
  9. {
  10. private GUIResourceField skinField;
  11. private GUIGameObjectField cameraField;
  12. private InspectableState modifyState;
  13. /// <inheritdoc/>
  14. protected internal override void Initialize()
  15. {
  16. BuildGUI();
  17. }
  18. /// <inheritdoc/>
  19. protected internal override InspectableState Refresh()
  20. {
  21. GUIWidget guiWidget = InspectedObject as GUIWidget;
  22. if (guiWidget == null)
  23. return InspectableState.NotModified;
  24. skinField.Value = guiWidget.Skin;
  25. cameraField.Value = guiWidget.Camera;
  26. InspectableState oldState = modifyState;
  27. if (modifyState.HasFlag(InspectableState.Modified))
  28. modifyState = InspectableState.NotModified;
  29. return oldState;
  30. }
  31. /// <summary>
  32. /// Recreates all the GUI elements used by this inspector.
  33. /// </summary>
  34. private void BuildGUI()
  35. {
  36. Layout.Clear();
  37. GUIWidget guiWidget = InspectedObject as GUIWidget;
  38. if (guiWidget == null)
  39. return;
  40. skinField = new GUIResourceField(typeof(GUISkin), new LocEdString("Skin"));
  41. cameraField = new GUIGameObjectField(typeof (Camera), new LocEdString("Camera"));
  42. skinField.OnChanged += x =>
  43. {
  44. GUISkin skin = Resources.Load<GUISkin>(x);
  45. guiWidget.Skin = skin;
  46. MarkAsModified();
  47. ConfirmModify();
  48. };
  49. cameraField.OnChanged += x =>
  50. {
  51. guiWidget.Camera = x as Camera;
  52. MarkAsModified();
  53. ConfirmModify();
  54. };
  55. Layout.AddElement(skinField);
  56. Layout.AddElement(cameraField);
  57. }
  58. /// <summary>
  59. /// Marks the contents of the inspector as modified.
  60. /// </summary>
  61. protected void MarkAsModified()
  62. {
  63. modifyState |= InspectableState.ModifyInProgress;
  64. }
  65. /// <summary>
  66. /// Confirms any queued modifications.
  67. /// </summary>
  68. protected void ConfirmModify()
  69. {
  70. if (modifyState.HasFlag(InspectableState.ModifyInProgress))
  71. modifyState |= InspectableState.Modified;
  72. }
  73. }
  74. }