Skip to content

Commit

Permalink
Merge pull request #31 from nasshu2916/feature/recoder-window-progress
Browse files Browse the repository at this point in the history
DMX RecorderWindow の表示周り改善
  • Loading branch information
nasshu2916 authored Jan 9, 2025
2 parents 7987dc3 + abc06a5 commit f413fb6
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 35 deletions.
19 changes: 13 additions & 6 deletions Assets/ArtNet/Editor/DmxRecorder/RecorderSettingsEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,16 @@ private static class Styles
}

internal event Action OnRecorderValidated;
private SerializedProperty _universeFilter, _fileGenerator, _take;

public void OnEnable()
{
if (target == null) return;

_universeFilter = serializedObject.FindProperty("_universeFilter");
_fileGenerator = serializedObject.FindProperty("_fileGenerator");
_take = serializedObject.FindProperty("_take");
}

public override void OnInspectorGUI()
{
Expand All @@ -26,17 +36,14 @@ public override void OnInspectorGUI()
DrawHeader("Output File");
EditorGUILayout.Separator();

var universeFilter = serializedObject.FindProperty("_universeFilter");
EditorGUILayout.PropertyField(universeFilter, GUIContent.none);
EditorGUILayout.PropertyField(_universeFilter, GUIContent.none);
EditorGUILayout.Space();

var fileNameGenerator = serializedObject.FindProperty("_fileGenerator");
EditorGUILayout.PropertyField(fileNameGenerator, GUIContent.none);
EditorGUILayout.PropertyField(_fileGenerator, GUIContent.none);

EditorGUILayout.Space();

var take = serializedObject.FindProperty("_take");
EditorGUILayout.PropertyField(take, Styles.TakeNumberLabel);
EditorGUILayout.PropertyField(_take, Styles.TakeNumberLabel);

EditorGUILayout.Separator();

Expand Down
119 changes: 90 additions & 29 deletions Assets/ArtNet/Editor/DmxRecorder/RecorderWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ private class RecorderList : ElementItemList<RecorderItem> { }

private static IEnumerable<Type> _cachedRecorderTypes;

private VisualElement _addNewRecordPanel, _recorderSettingsPanel;
private RecorderList _recorderList;
private RecorderItem _selectedRecorderItem;

private RecordController _controller;
private RecordControllerSettings _controllerSettings;

private Label _timeCode;
private Button _playButton, _stopButton;
Expand All @@ -57,17 +57,21 @@ private void OnEnable()

private void OnDisable()
{
Undo.undoRedoPerformed -= OnUndoRedoPerformed;
UnregisterCallbacks();
}

private void Update()
private void RegisterCallbacks()
{
if (IsRecording) _timeCode.text = TimeCodeText(_controller.GetRecordingTime());
Undo.undoRedoPerformed += OnUndoRedoPerformed;
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
EditorApplication.update += OnUpdate;
}

private void RegisterCallbacks()
private void UnregisterCallbacks()
{
Undo.undoRedoPerformed += OnUndoRedoPerformed;
Undo.undoRedoPerformed -= OnUndoRedoPerformed;
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
EditorApplication.update -= OnUpdate;
}

private void OnUndoRedoPerformed()
Expand All @@ -76,12 +80,57 @@ private void OnUndoRedoPerformed()
SaveAndRepaint();
}

private void OnPlayModeStateChanged(PlayModeStateChange state)
{
if (state == PlayModeStateChange.EnteredEditMode)
{
SetRecordControllerSettings(RecordControllerSettings.GetOrNewGlobalSettings());
ReloadRecorderSettings();
Repaint();
}
}

private void OnUpdate()
{
switch (_controller.Status)
{
case RecordingStatus.Recording:
_timeCode.text = TimeCodeText(_controller.GetRecordingTime());
break;
case RecordingStatus.Paused:
break;
case RecordingStatus.None:
OnUpdateRecordButton();
break;
default:
throw new ArgumentOutOfRangeException();
}
}

private void OnUpdateRecordButton()
{
var recorderSettings = _controller.Settings.RecorderSettings;
if (recorderSettings.All(x => !x.Enabled))
{
SetRecordButtonEnabled(false, "No recorders enabled");
return;
}

if (recorderSettings.Any(x => x.Enabled && x.HasErrors()))
{
SetRecordButtonEnabled(false, "Some recorders have errors");
return;
}

SetRecordButtonEnabled(true);
}

private void ReloadRecorderSettings()
{
if (_controllerSettings == null)
if (_controller?.Settings == null)
return;

var recorderItems = _controllerSettings.RecorderSettings.Select(CreateRecorderItem).ToArray();
var recorderItems = _controller.Settings.RecorderSettings.Select(CreateRecorderItem).ToArray();
foreach (var recorderItem in recorderItems)
recorderItem.UpdateState();

Expand All @@ -90,8 +139,8 @@ private void ReloadRecorderSettings()

private void SaveAndRepaint()
{
if (_controllerSettings != null)
_controllerSettings.Save();
if (_controller.Settings != null)
_controller.Settings.Save();

Repaint();
}
Expand Down Expand Up @@ -132,18 +181,18 @@ private void CreateView()

_playButton = visualElement.Q<Button>("playButton");
_playButton.clicked += OnPlayButtonClicked;
_playButton.Add(new Image { image = IconHelper.PlayButton });
_playButton.style.backgroundImage = (StyleBackground) IconHelper.PlayButton;

_stopButton = visualElement.Q<Button>("stopButton");
_stopButton.clicked += OnStopButtonClicked;
_stopButton.Add(new Image { image = IconHelper.PreMatQuad });
_stopButton.style.backgroundImage = (StyleBackground) IconHelper.PreMatQuad;
_stopButton.SetEnabled(false);

// RecordersPanel の作成
var recordersPanel = visualElement.Q<VisualElement>("recordersPanel");

var addRecorderLabel = visualElement.Q<Label>("addRecorderLabel");
addRecorderLabel.RegisterCallback<ClickEvent>(_ => ShowRecorderContextMenu());
_addNewRecordPanel = visualElement.Q<Label>("addRecorderLabel");
_addNewRecordPanel.RegisterCallback<ClickEvent>(_ => ShowRecorderContextMenu());
_recorderList = new RecorderList
{
name = "recorderList",
Expand All @@ -156,10 +205,11 @@ private void CreateView()
_recorderList.OnContextMenu += ShowRecorderContextMenu;
recordersPanel.Add(_recorderList);

var recorderSettingsPanel = visualElement.Q<VisualElement>("recorderSettingsPanel");
recorderSettingsPanel.Add(new IMGUIContainer(RecorderSettingsGUI));
_recorderSettingsPanel = visualElement.Q<VisualElement>("recorderSettingsPanel");
_recorderSettingsPanel.Add(new IMGUIContainer(RecorderSettingsGUI));

SetRecordControllerSettings(RecordControllerSettings.GetOrNewGlobalSettings());
SetSettingPanelEnabled(!DisableEditRecordSettings());
}

private bool DisableEditRecordSettings()
Expand All @@ -169,7 +219,6 @@ private bool DisableEditRecordSettings()

private void SetRecordControllerSettings(RecordControllerSettings settings)
{
_controllerSettings = settings;
_controller = new RecordController(settings);
_controller.OnStartRecording += OnStartRecording;
_controller.OnPauseRecording += OnPauseRecording;
Expand Down Expand Up @@ -226,7 +275,7 @@ private void RecorderSettingsGUI()
if (EditorGUI.EndChangeCheck() || EditorUtility.IsDirty(_selectedRecorderItem.Settings))
{
// data changed
_controllerSettings.Save();
_controller.Settings.Save();
_selectedRecorderItem.UpdateState();
}
}
Expand All @@ -241,11 +290,12 @@ private void RecorderSettingsGUI()
private void ShowRecorderContextMenu()
{
var menu = new GenericMenu();
var isDisabled = DisableEditRecordSettings();

foreach (var type in _cachedRecorderTypes)
{
var context = new GUIContent(type.Name);
if (DisableEditRecordSettings())
if (isDisabled)
{
menu.AddDisabledItem(context);
}
Expand Down Expand Up @@ -287,7 +337,7 @@ private void OnRecorderContextMenu(RecorderItem recorder)

private RecorderItem CreateRecorderItem(RecorderSettings recorderSettings)
{
var recorderItem = new RecorderItem(_controllerSettings, recorderSettings);
var recorderItem = new RecorderItem(_controller.Settings, recorderSettings);
recorderItem.OnEnableStateChanged += enabled =>
{
if (enabled)
Expand All @@ -314,7 +364,7 @@ private void AddRecorder(RecorderSettings recorder, string recorderName, bool en
{
recorder.name = UniqueRecorderName(recorderName);
recorder.Enabled = enabled;
_controllerSettings.AddRecorderSettings(recorder);
_controller.Settings.AddRecorderSettings(recorder);

var item = CreateRecorderItem(recorder);
_recorderList.Add(item);
Expand All @@ -332,7 +382,7 @@ private void DuplicateRecorder(RecorderItem item)
private void DeleteRecorder(RecorderItem item)
{
var settings = item.Settings;
_controllerSettings.RemoveRecorderSettings(settings);
_controller.Settings.RemoveRecorderSettings(settings);
_recorderList.Remove(item);
}

Expand All @@ -344,7 +394,7 @@ private void OnAddNewRecorder(Type type)

private string UniqueRecorderName(string recorderName)
{
var existingNames = _controllerSettings.RecorderSettings.Select(settings => settings.name).ToArray();
var existingNames = _controller.Settings.RecorderSettings.Select(settings => settings.name).ToArray();
return ObjectNames.GetUniqueName(existingNames, recorderName);
}

Expand Down Expand Up @@ -382,27 +432,38 @@ private void OnStartRecording()
{
_timeCode.ClearClassList();
_timeCode.AddToClassList("recording");
_playButton.Clear();
_playButton.Add(new Image { image = IconHelper.PauseButton });
_playButton.style.backgroundImage = (StyleBackground) IconHelper.PauseButton;
_stopButton.SetEnabled(true);
SetSettingPanelEnabled(false);
}

private void OnPauseRecording()
{
_timeCode.ClearClassList();
_timeCode.AddToClassList("paused");
_playButton.Clear();
_playButton.Add(new Image { image = IconHelper.PlayButton });
_playButton.style.backgroundImage = (StyleBackground) IconHelper.PlayButton;
_stopButton.SetEnabled(true);
}

private void OnFinishRecording()
{
_timeCode.ClearClassList();
_playButton.Clear();
_playButton.Add(new Image { image = IconHelper.PlayButton });
_playButton.style.backgroundImage = (StyleBackground) IconHelper.PlayButton;
_stopButton.SetEnabled(false);
_timeCode.text = TimeCodeText(_controller.GetRecordingTime());
SetSettingPanelEnabled(true);
}

private void SetRecordButtonEnabled(bool enabled, string tooltip = null)
{
_playButton.SetEnabled(enabled);
_playButton.tooltip = tooltip;
}

private void SetSettingPanelEnabled(bool enabled)
{
_addNewRecordPanel.SetEnabled(enabled);
_recorderSettingsPanel.SetEnabled(enabled);
}

private static string TimeCodeText(int time)
Expand Down

0 comments on commit f413fb6

Please sign in to comment.