AudioClipInspector.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using BansheeEngine;
  4. namespace BansheeEditor
  5. {
  6. /** @addtogroup Inspectors
  7. * @{
  8. */
  9. /// <summary>
  10. /// Renders an inspector for the <see cref="AudioClip"/> resource.
  11. /// </summary>
  12. [CustomInspector(typeof(AudioClip))]
  13. internal class AudioClipInspector : Inspector
  14. {
  15. private GUIEnumField formatField = new GUIEnumField(typeof(AudioFormat), new LocEdString("Format"));
  16. private GUIEnumField readModeField = new GUIEnumField(typeof(AudioReadMode), new LocEdString("Read mode"));
  17. private GUIEnumField bitDepthField = new GUIEnumField(typeof(AudioBitDepth), new LocEdString("Bit depth"));
  18. private GUIToggleField is3DField = new GUIToggleField(new LocEdString("3D"));
  19. private GUIButton reimportButton = new GUIButton(new LocEdString("Reimport"));
  20. private AudioClipImportOptions importOptions;
  21. /// <inheritdoc/>
  22. protected internal override void Initialize()
  23. {
  24. importOptions = GetImportOptions();
  25. formatField.OnSelectionChanged += x => importOptions.Format = (AudioFormat)x;
  26. readModeField.OnSelectionChanged += x => importOptions.ReadMode = (AudioReadMode)x;
  27. bitDepthField.OnSelectionChanged += x => importOptions.BitDepth = (AudioBitDepth)x;
  28. is3DField.OnChanged += x => importOptions.Is3D = x;
  29. reimportButton.OnClick += TriggerReimport;
  30. Layout.AddElement(formatField);
  31. Layout.AddElement(readModeField);
  32. Layout.AddElement(bitDepthField);
  33. Layout.AddElement(is3DField);
  34. Layout.AddSpace(10);
  35. GUILayout reimportButtonLayout = Layout.AddLayoutX();
  36. reimportButtonLayout.AddFlexibleSpace();
  37. reimportButtonLayout.AddElement(reimportButton);
  38. }
  39. /// <inheritdoc/>
  40. protected internal override InspectableState Refresh()
  41. {
  42. AudioClipImportOptions newImportOptions = GetImportOptions();
  43. formatField.Value = (ulong)newImportOptions.Format;
  44. readModeField.Value = (ulong)newImportOptions.ReadMode;
  45. bitDepthField.Value = (ulong)newImportOptions.BitDepth;
  46. is3DField.Value = newImportOptions.Is3D;
  47. importOptions = newImportOptions;
  48. return InspectableState.NotModified;
  49. }
  50. /// <summary>
  51. /// Retrieves import options for the audio clip we're currently inspecting.
  52. /// </summary>
  53. /// <returns>Audio clip import options object.</returns>
  54. private AudioClipImportOptions GetImportOptions()
  55. {
  56. AudioClipImportOptions output = null;
  57. LibraryEntry meshEntry = ProjectLibrary.GetEntry(InspectedResourcePath);
  58. if (meshEntry != null && meshEntry.Type == LibraryEntryType.File)
  59. {
  60. FileEntry meshFileEntry = (FileEntry)meshEntry;
  61. output = meshFileEntry.Options as AudioClipImportOptions;
  62. }
  63. if (output == null)
  64. {
  65. if (importOptions == null)
  66. output = new AudioClipImportOptions();
  67. else
  68. output = importOptions;
  69. }
  70. return output;
  71. }
  72. /// <summary>
  73. /// Reimports the resource according to the currently set import options.
  74. /// </summary>
  75. private void TriggerReimport()
  76. {
  77. ProjectLibrary.Reimport(InspectedResourcePath, importOptions, true);
  78. }
  79. }
  80. /** @} */
  81. }