#if UNITY_EDITOR using UnityEngine; using UnityEditor.UIElements; using System.Collections.Generic; namespace GSpawn { public class PluginObjectLayerDbUI : PluginUI { private List _pluginLayerBuffer = new List(); private List _unityLayerBuffer = new List(); [SerializeField] private ListViewState _layerViewState; private ListView _layerView; public static PluginObjectLayerDbUI instance { get { return PluginObjectLayerDb.instance.ui; } } protected override void onRefresh() { refreshLayerView(); } protected override void onBuild() { createTopToolbar(); createLayerView(); refreshLayerView(); } protected override void onEnabled() { if (_layerViewState == null) { _layerViewState = ScriptableObject.CreateInstance(); _layerViewState.name = GetType().Name + "_LayerViewState"; AssetDbEx.addObjectToAsset(_layerViewState, PluginObjectLayerDb.instance); } } protected override void onDestroy() { ScriptableObjectEx.destroyImmediate(_layerViewState); } protected override void onUndoRedo() { if (_layerView != null) refreshLayerView(); } private void createTopToolbar() { var toolbar = new Toolbar(); toolbar.style.flexShrink = 0.0f; contentContainer.Add(toolbar); var button = UI.createToolbarButton(TexturePool.instance.lightBulb, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar); UI.useDefaultMargins(button); button.tooltip = "Activate selected layers."; button.clicked += () => { selectedLayers(_unityLayerBuffer); PluginScene.instance.setLayersActive(_unityLayerBuffer, true, true); }; button = UI.createToolbarButton(TexturePool.instance.lightBulbGray, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar); UI.useDefaultMargins(button); button.tooltip = "Deactivate selected layers."; button.clicked += () => { selectedLayers(_unityLayerBuffer); PluginScene.instance.setLayersActive(_unityLayerBuffer, false, true); }; button = UI.createToolbarButton(TexturePool.instance.delete, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar); UI.useDefaultMargins(button); button.tooltip = "Delete selected layers. Note: Tile rule prefab instances will not be deleted."; button.clicked += () => { selectedLayers(_unityLayerBuffer); PluginScene.instance.deleteLayers(_unityLayerBuffer); }; UI.createFlexGrow(toolbar); button = UI.createToolbarButton(TexturePool.instance.refresh, UI.ButtonStyle.Push, UIValues.smallToolbarButtonSize, toolbar); button.tooltip = "Refresh."; button.style.marginTop = 2.0f; button.clicked += () => { refresh(); }; } private void createLayerView() { _layerView = new ListView(_layerViewState, contentContainer); contentContainer.style.flexGrow = 1.0f; // Note: Must be here. Otherwise, the list view scroll bar shows up unnecessarily. _layerView.canRenameItems = true; _layerView.canMultiSelect = true; } private void refreshLayerView() { _layerView.onBeginBuild(); var layers = new List(); PluginObjectLayerDb.instance.getLayers(layers); foreach (var l in layers) _layerView.addItem(l, true); _layerView.onEndBuild(); } private void selectedLayers(List layers) { _layerView.getSelectedItemData(_pluginLayerBuffer); PluginObjectLayerDb.instance.getUnityLayers(_pluginLayerBuffer, layers); } } } #endif