using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UIElements; namespace BITKit.UX { public class TabContainer : VisualElement { public new class UxmlTraits:VisualElement.UxmlTraits { private readonly UxmlStringAttributeDescription _mTabPath = new () { name = "TabPath", }; public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc) { base.Init(ve, bag, cc); var container = (TabContainer)ve; container.TabPath = _mTabPath.GetValueFromBag(bag, cc); } } public new class UxmlFactory : UxmlFactory { } public TabContainer() { RegisterCallback(OnAttachToPanel); RegisterCallback(OnDetachFromPanel); } public string TabPath { get=>_tabPath; set { _tabPath = value; } } private string _tabPath; private TabBar _tabBar; private int _index; private void OnDetachFromPanel(DetachFromPanelEvent evt) { Rebuild(); } private void OnAttachToPanel(AttachToPanelEvent evt) { Rebuild(); } private void Rebuild() { if (_tabBar is not null) { _tabBar.OnTabChanged -= OnTabChanged; } _tabBar = panel.visualTree.Q(TabPath); if (_tabBar is not null) { _tabBar.OnTabChanged += OnTabChanged; } OnTabChanged(_index); } private void OnTabChanged(int obj) { _index = obj; if (childCount <= 0) return; for (var i = 0; i < childCount; i++) { var visualElement = this[i]; visualElement.SetActive(i == _index); } } } }