Editor/TimelineEventPopup.cs
using System;
using Editor;
using Sandbox;
namespace Timeline;
public class TimelineEventPopup : Widget
{
TimelineEventEditorWidget Editor;
Label labelMultiple;
public TimelineEventPopup(Widget parent) : base(parent)
{
WindowFlags = WindowFlags.Dialog | WindowFlags.Customized | WindowFlags.WindowTitle | WindowFlags.CloseButton | WindowFlags.WindowSystemMenuHint;
WindowTitle = "Timeline Event Editor";
DeleteOnClose = true;
MinimumSize = new(800, 200);
Size = new(800, 200);
Editor = new TimelineEventEditorWidget(this);
Layout = Layout.Column();
Layout.Margin = 16;
Layout.Spacing = 8;
labelMultiple = Layout.Add(new Label(this));
labelMultiple.Text = "Multiple Values Selected. Making changes will modify all.";
labelMultiple.SetStyles($"color: {Theme.MultipleValues.Hex};");
labelMultiple.Visible = false;
Layout.Add(Editor, 1);
}
public void AddEventTracks(SerializedProperty serializedProperty, Action onChanged)
{
labelMultiple.Visible = serializedProperty.IsMultipleDifferentValues;
AddEventTracks(
() => serializedProperty.GetValue<EventTracks>(),
v =>
{
serializedProperty.SetValue(v);
onChanged?.Invoke();
labelMultiple.Visible = serializedProperty.IsMultipleDifferentValues;
}
);
}
public void AddEventTracks(Func<EventTracks> get, Action<EventTracks> set)
{
var eventTracks = get() ?? new EventTracks();
Editor.SerializedProperty = null; // We're not using serialized property directly in this case
Editor.Value = eventTracks;
Editor.ValueChanged = (newValue) =>
{
set?.Invoke(newValue);
};
}
protected override void OnPaint()
{
base.OnPaint();
// Update multiple values visibility
if (Editor.SerializedProperty != null)
{
labelMultiple.Visible = Editor.SerializedProperty.IsMultipleDifferentValues;
}
}
}