100 lines
3.3 KiB
C#
100 lines
3.3 KiB
C#
#if UNITY_2019_3_OR_NEWER
|
|
using UnityEditor.UIElements;
|
|
using UnityEngine.UIElements;
|
|
using UnityEngine.UIElements.StyleSheets;
|
|
#else
|
|
using UnityEditor.Experimental.UIElements;
|
|
using UnityEngine.Experimental.UIElements;
|
|
using UnityEngine.Experimental.UIElements.StyleEnums;
|
|
#endif
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using VRC.SDKBase.Midi;
|
|
|
|
namespace VRC.SDK3.Midi
|
|
{
|
|
#if UNITY_STANDALONE_WIN
|
|
public class VRCMidiWindow : EditorWindow
|
|
{
|
|
private VisualElement _rootView;
|
|
private TextField _deviceNameField;
|
|
|
|
public const string DEVICE_NAME_STRING = "VRC.SDK3.Midi.Device";
|
|
#if (UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN) && !UNITY_ANDROID
|
|
[MenuItem("VRChat SDK/Utilities/Midi")]
|
|
private static void ShowWindow()
|
|
{
|
|
VRCMidiWindow foo = CreateInstance(typeof(VRCMidiWindow)) as VRCMidiWindow;
|
|
// ReSharper disable once PossibleNullReferenceException
|
|
foo.titleContent = new GUIContent("Midi");
|
|
foo.maxSize = new Vector2(256, 80);
|
|
foo.ShowUtility();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
#if UNITY_2019_3_OR_NEWER
|
|
_rootView = rootVisualElement;
|
|
#else
|
|
_rootView = this.GetRootVisualContainer();
|
|
#endif
|
|
_rootView.Add(new Label("Midi Settings")
|
|
{
|
|
style =
|
|
{
|
|
fontSize = 18,
|
|
marginTop = 10,
|
|
marginBottom = 10,
|
|
}
|
|
});
|
|
|
|
// Container for Device Name label and field
|
|
VisualElement deviceNameContainer = new VisualElement() {style = {flexDirection = FlexDirection.Row}};
|
|
_rootView.Add(deviceNameContainer);
|
|
|
|
// Label for Field
|
|
deviceNameContainer.Add(new Label("Device Name"));
|
|
|
|
// Input Name Field
|
|
_deviceNameField = new TextField()
|
|
{
|
|
isDelayed = true,
|
|
value = EditorPrefs.GetString(DEVICE_NAME_STRING),
|
|
style = { flexGrow = 1 },
|
|
};
|
|
#if UNITY_2019_3_OR_NEWER
|
|
_deviceNameField.RegisterValueChangedCallback(
|
|
#else
|
|
_deviceNameField.OnValueChanged(
|
|
#endif
|
|
evt => EditorPrefs.SetString(DEVICE_NAME_STRING, evt.newValue));
|
|
|
|
// Get available device names
|
|
VRCPortMidiInput midi = new VRCPortMidiInput();
|
|
var deviceNames = midi.GetDeviceNames().ToList();
|
|
|
|
// Add blank device name to use if specified device not found
|
|
deviceNames.Insert(0, "");
|
|
string currentDeviceValue = EditorPrefs.GetString(DEVICE_NAME_STRING);
|
|
string defaultValue = deviceNames.Contains(currentDeviceValue) ? currentDeviceValue : "";
|
|
|
|
// Create and add device popup
|
|
var deviceNamePopupField = new PopupField<string>(deviceNames, defaultValue)
|
|
{
|
|
style = {flexGrow = 1},
|
|
name = "midiDevicePopUp",
|
|
};
|
|
#if UNITY_2019_3_OR_NEWER
|
|
deviceNamePopupField.RegisterValueChangedCallback(
|
|
#else
|
|
deviceNamePopupField.OnValueChanged(
|
|
#endif
|
|
evt => EditorPrefs.SetString(DEVICE_NAME_STRING, evt.newValue));
|
|
deviceNameContainer.Add(deviceNamePopupField);
|
|
}
|
|
#endif
|
|
}
|
|
#endif
|
|
}
|