// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Loader;
using System.Runtime.Serialization.Formatters.Binary;
using FlaxEditor.CustomEditors;
using FlaxEditor.CustomEditors.Editors;
using FlaxEditor.GUI.ContextMenu;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.Surface
{
class AttributesEditor : ContextMenuBase
{
private CustomEditorPresenter _presenter;
private byte[] _oldData;
private class Proxy
{
[Collection(OverrideEditorTypeName = "FlaxEditor.Surface.AttributesEditor+ValuesEditor", Spacing = 10)]
[EditorDisplay(null, EditorDisplayAttribute.InlineStyle)]
public Attribute[] Value;
}
public sealed class ValuesEditor : ObjectSwitcherEditor
{
private OptionType[] _options;
///
protected override OptionType[] Options => _options;
///
public override void Initialize(LayoutElementsContainer layout)
{
var options = (IList)Presenter.Panel.Tag;
_options = new OptionType[options.Count];
for (int i = 0; i < options.Count; i++)
{
var type = options[i];
_options[i] = new OptionType(Utilities.Utils.GetPropertyNameUI(type.Name), type, Creator);
}
base.Initialize(layout);
}
///
protected override void Deinitialize()
{
base.Deinitialize();
_options = null;
}
private object Creator(Type type)
{
var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, Utils.GetEmptyArray(), null);
return ctor.Invoke(Utils.GetEmptyArray