void OnUndoRedo()
        {
            var undos = new List <string>();
            var redos = new List <string>();

            Undo.GetRecords(undos, redos);

            var rebuildAll = redos.Any(x => x.StartsWith("Timeline ")) || undos.Any(x => x.StartsWith("Timeline"));
            var evalNow    = redos.Any(x => x.Contains("Edit Curve")) || undos.Any(x => x.Contains("Edit Curve"));

            if (rebuildAll || evalNow)
            {
                ValidateSelection();
                if (state != null)
                {
                    if (evalNow) // when curves change, the new values need to be set in the transform before the inspector handles the undo
                    {
                        state.EvaluateImmediate();
                    }
                    if (rebuildAll)
                    {
                        state.Refresh();
                    }
                }
                Repaint();
            }
        }