Beispiel #1
0
        public JointField(Asset asset, SerializedProperty property, Asset.Metric metric)
        {
            m_Asset    = asset;
            m_Property = property;
            m_Metric   = metric;

            Foldout foldout = new Foldout {
                text = "Joints"
            };

            foldout.AddToClassList("jointToggle");
            foldout.value = property.isExpanded;
            Add(foldout);

            foldout.RegisterValueChangedCallback(evt => ToggleListVisibility());

            Add(m_ListView);
            m_ListView.AddToClassList("jointsListView");
            m_ListView.style.display = property.isExpanded ? DisplayStyle.Flex : DisplayStyle.None;
            Rebuild();

            RegisterCallback <AttachToPanelEvent>(OnAttachToPanel);
            RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel);

            focusable = true;

            m_ForceDisabled = false;
        }
Beispiel #2
0
            /// <summary> Draws the left column from the avaliable types. </summary>
            private void DrawLeftColumnItems()
            {
                // Clears out old visual elements.
                leftColumnItems.Clear();
                DataManagerDataTypeFinder.CheckForNewDataTypes();

                #region Sets up ListView.
                visibleEntries = new List <DataManagerSettingsEntry>();
                foreach (DataManagerSettingsEntry entry in DataManagerSettingsAccessor.Settings.EntriesArray)
                {
                    if (entry.visiblity == VisiblityToManager.Visible)
                    {
                        visibleEntries.Add(entry);
                    }
                }

                Func <VisualElement> makeItem = () => new Label();

                Action <VisualElement, int> bindItem = (e, i) => (e as Label).text = visibleEntries.ToArray()[i].typeAsString;
                bindItem += (e, i) => (e as Label).AddToClassList("item_list"); // Adds the class but does not use styling for some reason.

                const int itemHeight = 20;

                leftList = new ListView(visibleEntries, itemHeight, makeItem, bindItem);
                leftList.AddToClassList("list");
                leftList.selectionType       = SelectionType.Single;
                leftList.onSelectionChanged += CheckForSelectedType;

                leftColumnItems.Add(leftList);
                #endregion
            }
        public PrivilegeSection(string label, Privilege.Category category)
        {
            m_Category = category;
            AddToClassList(ussClassName);
            AddToClassList(emptyVariantUssClassName);

            m_Header = new Label {
                text = label
            };
            m_Header.AddToClassList(headerUssClassName);
            hierarchy.Add(m_Header);

            m_Body = new VisualElement();
            m_Body.AddToClassList(bodyUssClassName);
            hierarchy.Add(m_Body);

            m_BodyContainer = new VisualElement();
            m_BodyContainer.AddToClassList(containerUssClassName);
            m_Body.hierarchy.Add(m_BodyContainer);

            m_BodyListView = new ListView(null, kItemSize, MakeToggle, BindToggle);
            m_BodyListView.AddToClassList(listViewUssClassName);
            m_BodyContainer.hierarchy.Add(m_BodyListView);

            m_BodyEmptyLabel = new Label {
                text = "This section contains no privileges"
            };
            m_BodyEmptyLabel.AddToClassList(emptyLabelUssClassName);
            m_Body.hierarchy.Add(m_BodyEmptyLabel);
        }
Beispiel #4
0
    private ListView GetOrCreateList(LokiSearchTree tree, int pageIndex)
    {
        if (pageIndex < pageStack.Count)
        {
            var existingList = pageStack[pageIndex];
            if (tree != null)
            {
                BindList(existingList, tree);
            }
            return(existingList);
        }

        var listView = new ListView(null, ITEM_HEIGHT, MakeEntryElement, BindEntryElement);

        listView.AddToClassList("search-list");
        listView.showBorder     = false;
        listView.style.width    = size.x;
        listView.style.minWidth = size.x;
        listView.style.maxWidth = size.x;

        pageContainer.Add(listView);
        pageStack.Add(listView);

        BindList(listView, tree);

        return(listView);
    }
Beispiel #5
0
 public AdapterListView()
 {
     AddToClassList(UssClassName);
     m_ListView = new ListView();
     m_ListView.style.flexGrow = new StyleFloat(1);
     m_ListView.AddToClassList(ListViewUssClassName);
     Add(m_ListView);
 }
Beispiel #6
0
            //[SettingsProvider]
            public static SettingsProvider CreateDataManagerSettings()
            {
                DataManagerDataTypeFinder.CheckForNewDataTypes();

                currentTarget = null;

                SettingsProvider provider = new SettingsProvider("ACTools/Data Manager", SettingsScope.User)
                {
                    activateHandler = (searchContext, rootElement) =>
                    {
                        SerializedObject serializedSettings = DataManagerSettingsAccessor.GetSerializedSettings();

                        #region UXML and USS set-up
                        // Import UXML and USS
                        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/_ACTools/_Data Manager/Editor/DataManagerSettingsProvider.uxml");
                        StyleSheet      styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/_ACTools/_Data Manager/Editor/DataManagerSettingsProvider.uss");

                        // Adds style sheet to root.
                        rootElement.styleSheets.Add(styleSheet);

                        // Clones the visual tree and adds it to the root.
                        VisualElement tree = visualTree.CloneTree();
                        rootElement.Add(tree);
                        #endregion

                        #region Sets up button.
                        if (button == null)
                        {
                            button = (Button)tree.hierarchy.ElementAt(1);
                        }
                        button.SetEnabled(false);
                        button.clickable.clicked += SwitchTargetEnabledStatus;
                        #endregion

                        #region Sets up ListView.
                        Func <VisualElement> makeItem = () => new Label();

                        Action <VisualElement, int> bindItem = (e, i) => (e as Label).text = DataManagerSettingsAccessor.Settings.EntriesArray[i].typeAsString;

                        const int itemHeight = 16;

                        listView = new ListView(DataManagerSettingsAccessor.Settings.EntriesArray, itemHeight, makeItem, bindItem);
                        listView.AddToClassList("list");
                        listView.selectionType       = SelectionType.Single;
                        listView.onSelectionChanged += UpdateButton;

                        rootElement.Add(listView);
                        #endregion
                    },

                    // Populate the search keywords to enable smart search filtering and label highlighting.
                    keywords = new HashSet <string>(new[] { "ACTools", "Data", "Manager", "Data Manager" })
                };

                return(provider);
            }
Beispiel #7
0
 void ApplyCollapseState()
 {
     if (m_Collapsed)
     {
         m_CollapseToggle.AddToClassList("collapsed-toggle-state");
         m_LabelsListView.AddToClassList("collapsed");
     }
     else
     {
         m_CollapseToggle.RemoveFromClassList("collapsed-toggle-state");
         m_LabelsListView.RemoveFromClassList("collapsed");
     }
 }
Beispiel #8
0
    // CreateTopStatListView() creates a set of Labels containing high stats
    private void CreateTopStatListView()
    {
        int maximumAmountOfTopStats;

        // set the maximumAmountOfTopStats to 5 or less
        if (topStats.Count > 4)
        {
            maximumAmountOfTopStats = 5;
        }
        else
        {
            maximumAmountOfTopStats = topStats.Count;
        }


        var topStatsListItems = new List <string>();

        topStatsListItems.Add("Your top points: " + GetRealmPlayerTopStat());


        for (int i = 0; i < maximumAmountOfTopStats; i++)
        {
            // only display the top stats if they are greater than 0, and show
            // no top stats if there are none greater than 0
            if (topStats[i].Score > 1)
            {
                topStatsListItems.Add($"{topStats[i].StatOwner.Name}: {topStats[i].Score} points");
            }
        }
        ;
        // Create a new label for each top score
        var label = new Label();

        label.AddToClassList("list-item-game-name-label");
        Func <VisualElement> makeItem = () => new Label();

        // Bind Stats to the UI
        Action <VisualElement, int> bindItem = (e, i) =>
        {
            (e as Label).text = topStatsListItems[i];
            (e as Label).AddToClassList("list-item-game-name-label");
        };

        // Provide the list view with an explict height for every row
        // so it can calculate how many items to actually display
        const int itemHeight = 5;

        listView = new ListView(topStatsListItems, itemHeight, makeItem, bindItem);
        listView.AddToClassList("list-view");
    }
Beispiel #9
0
    private void OnEnable()
    {
        rootVisualElement.styleSheets.Add(AssetDatabase.LoadAssetAtPath <StyleSheet>(StyleSheetPath));

        var container = new ListView();

        container.AddToClassList("slab-container");

        for (var i = 0; i < Scores.Length; i++)
        {
            var score        = Scores[i];
            var scoreElement = new Score(i, score);
            container.Add(scoreElement);
        }

        rootVisualElement.Add(container);
    }
Beispiel #10
0
            /// <summary> Draws the right column based on the currently selected type. </summary>
            private void DrawRightColumnItems()
            {
                // Clears out old visual elements.
                rightColumnItems.Clear();

                if (DataTypeSelected)
                {
                    #region Sets up List.

                    selectedDataEntry = visibleEntries.ToArray()[leftList.selectedIndex];
                    Type stringToType = Type.GetType(selectedDataEntry.assemblyName);

                    List <UnityEngine.Object> objectArray = FolderUtility.FindAssetsByType(stringToType);
                    selectedDataObjects = new List <DataType>();

                    foreach (UnityEngine.Object obj in objectArray)
                    {
                        selectedDataObjects.Add((DataType)obj);
                    }

                    #endregion

                    #region Sets up ListView.

                    Label itemLabel = new Label();
                    itemLabel.AddToClassList("list_item");
                    Func <VisualElement> makeItem = () => new Label(); // Using the itemLabel cause the list to not add the first result for some reason.

                    Action <VisualElement, int> bindItem = (e, i) => (e as Label).text = selectedDataObjects.ToArray()[i].name;

                    const int itemHeight = 20;

                    rightList = new ListView(selectedDataObjects, itemHeight, makeItem, bindItem);
                    rightList.AddToClassList("list");
                    rightList.selectionType       = SelectionType.Single;
                    rightList.onSelectionChanged += CheckForSelectedObject;

                    rightColumnItems.Add(rightList);
                    #endregion
                }
            }
Beispiel #11
0
        void OnEnable()
        {
            rootVisualElement.AddStyleSheet(Configuration.ElementsPath, Stylesheet);
            rootVisualElement.AddToClassList(UssClassName);

            var header = new VisualElement();

            header.AddToClassList(HeaderUssClassName);

            _back = new Button(HistoryList.MoveBack)
            {
                text = "Back"
            };
            _back.AddToClassList(HeaderButtonUssClassName);

            _forward = new Button(HistoryList.MoveForward)
            {
                text = "Forward"
            };
            _forward.AddToClassList(HeaderButtonUssClassName);

            _listView = new ListView();
            _listView.AddToClassList(ListUssClassName);
            _listView.selectionType       = SelectionType.Single;
            _listView.itemsSource         = HistoryList.History;
            _listView.makeItem            = MakeItem;
            _listView.bindItem            = BindItem;
            _listView.onItemChosen       += item => Select();
            _listView.onSelectionChanged += selection => Highlight();

            header.Add(_back);
            header.Add(_forward);
            rootVisualElement.Add(header);
            rootVisualElement.Add(_listView);

            Refresh();

            Selection.selectionChanged += Refresh;
        }
            public TaggedAnimationClipSelector()
            {
                UIElementsUtils.ApplyStyleSheet("BoundaryClipWindow.uss", this);
                AddToClassList("clipSelector");

                m_FilterString = string.Empty;

                m_FilterField = new ToolbarSearchField();
                m_FilterField.RegisterValueChangedCallback(OnFilterChanged);
                Add(m_FilterField);

                var selectionArea = new VisualElement();

                selectionArea.AddToClassList("row");
                {
                    m_RevertImage = new Image();
                    var revertClick = new Clickable(() => Changes = false);
                    m_RevertImage.AddManipulator(revertClick);
                    m_RevertImage.AddToClassList("revertIcon");
                    selectionArea.Add(m_RevertImage);
                    m_CurrentSelectionLabel = new Label();
                    m_CurrentSelectionLabel.AddToClassList("selectionLabel");
                    selectionArea.Add(m_CurrentSelectionLabel);
                }
                Add(selectionArea);

                m_View            = new ListView();
                m_View.itemHeight = 18;
                m_View.makeItem   = MakeItem;
                m_View.bindItem   = BindItem;

                m_View.selectionType = SelectionType.None;
                m_View.AddToClassList("clipList");

                Add(m_View);

                UpdateLabel();
            }
Beispiel #13
0
            public QualitySettingsPanelVisualElement(string searchContext)
            {
                // Get the assigned HDRP assets
                m_HDRPAssets = new List <HDRPAssetLocations>();
                if (GraphicsSettings.renderPipelineAsset is HDRenderPipelineAsset hdrp)
                {
                    m_HDRPAssets.Add(new HDRPAssetLocations(true, hdrp));
                }

                var qualityLevelCount = QualitySettings.names.Length;

                for (var i = 0; i < qualityLevelCount; ++i)
                {
                    if (!(QualitySettings.GetRenderPipelineAssetAt(i) is HDRenderPipelineAsset hdrp2))
                    {
                        continue;
                    }

                    var index = m_HDRPAssets.FindIndex(a => a.asset == hdrp2);
                    if (index >= 0)
                    {
                        m_HDRPAssets[index].indices.Add(i);
                    }
                    else
                    {
                        var loc = new HDRPAssetLocations(false, hdrp2);
                        loc.indices.Add(i);
                        m_HDRPAssets.Add(loc);
                    }
                }

                m_HDRPAssets.Sort((l, r) => string.CompareOrdinal(l.asset.name, r.asset.name));

                // title
                var title = new Label()
                {
                    text = "Quality"
                };

                title.AddToClassList("h1");

                // Header
                var headerBox = new VisualElement();

                headerBox.style.height = 200;

                m_HDRPAssetList = new ListView()
                {
                    bindItem      = (el, i) => ((HDRPAssetHeaderEntry)el).Bind(i, m_HDRPAssets[i]),
                    itemHeight    = (int)EditorGUIUtility.singleLineHeight + 3,
                    selectionType = SelectionType.Single,
                    itemsSource   = m_HDRPAssets,
                    makeItem      = () => new HDRPAssetHeaderEntry(),
                };
                m_HDRPAssetList.AddToClassList("unity-quality-header-list");

#if UNITY_2020_1_OR_NEWER
                m_HDRPAssetList.onSelectionChange += OnSelectionChange;
#else
                m_HDRPAssetList.onSelectionChanged += OnSelectionChanged;
#endif

                headerBox.Add(m_HDRPAssetList);

                m_InspectorTitle      = new Label();
                m_InspectorTitle.text = "No asset selected";
                m_InspectorTitle.AddToClassList("h1");

                // Inspector
                var inspector = new IMGUIContainer(DrawInspector);
                inspector.style.flexGrow      = 1;
                inspector.style.flexDirection = FlexDirection.Row;

                var inspectorBox = new ScrollView();
                inspectorBox.style.flexGrow      = 1;
                inspectorBox.style.flexDirection = FlexDirection.Row;
                inspectorBox.contentContainer.Add(inspector);

                Add(title);
                Add(headerBox);
                Add(m_InspectorTitle);
                Add(inspectorBox);
            }
Beispiel #14
0
        private void SetupUI()
        {
            var styleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>($"{Utils.packageFolderName}/Editor/StyleSheets/PerformanceTrackerWindow.uss");

            rootVisualElement.styleSheets.Add(styleSheet);

            m_RefreshFromSearch = Delayer.Throttle(RefreshFromSearch);

            var toolbar = new UIElements.Toolbar();

            toolbar.AddToClassList("perf-toolbar");
            toolbar.style.height = PtStyles.itemHeight;

            var searchBox = new VisualElement();

            searchBox.AddToClassList("perf-search-box");
            AddSelectorLabel(toolbar, "Tracker");
            m_SearchField = new UIElements.ToolbarSearchField();
            m_SearchField.AddToClassList("perf-search-tracker");
            m_SearchField.value = m_FilterText;
            m_SearchField.RegisterCallback <ChangeEvent <string> >((evt) =>
            {
                m_RefreshFromSearch.Execute(evt.newValue);
            });
            searchBox.Add(m_SearchField);
            toolbar.Add(searchBox);

            var resetAllCountersButton = new Button(ResetAllCounters);

            resetAllCountersButton.text = "Reset all counters";
            resetAllCountersButton.AddToClassList("perf-tracker-toolbar-button");
            toolbar.Add(resetAllCountersButton);

            AddSelectorLabel(toolbar, "Update Speed");
            var choices             = PtModel.RefreshRates.Select(r => r.label).ToList();
            var updateSpeedSelector = new UIElements.PopupField <string>(choices, 0);

            updateSpeedSelector.value = PtModel.RefreshRates[m_UpdateSpeedIndex].label;
            updateSpeedSelector.AddToClassList("perf-update-speed-selector");
            updateSpeedSelector.RegisterCallback <ChangeEvent <string> >((evt) =>
            {
                m_UpdateSpeedIndex = Array.FindIndex(PtModel.RefreshRates, (r) => r.label == evt.newValue);
                ScheduleNextRefresh();
                SendAnalytics(Analytics.WindowUsageType.ChangeMonitoringSpeed);
            });
            toolbar.Add(updateSpeedSelector);

            AddSelectorLabel(toolbar, "Columns");
            var columnsChoice   = PtModel.ColumnDescriptors.Where(desc => desc.columnsSelectorMaskId > 0).Select(desc => desc.label).ToList();
            var columnsSelector = new UIElements.MaskField(columnsChoice, m_ShownColumn);

            columnsSelector.RegisterCallback <ChangeEvent <int> >((evt) =>
            {
                m_ShownColumn = evt.newValue;
                CreateHeaders();
                RefreshTrackers();
                SendAnalytics(Analytics.WindowUsageType.ChangeColumnLayout);
            });
            columnsSelector.AddToClassList("perf-columns-selector");
            toolbar.Add(columnsSelector);

            AddSelectorLabel(toolbar, "Sort By");
            m_SortBySelector       = new UIElements.EnumField(ColumnId.Name);
            m_SortBySelector.value = m_SortBy;
            m_SortBySelector.AddToClassList("perf-sort-by-selector");
            m_SortBySelector.RegisterCallback <ChangeEvent <Enum> >((evt) =>
            {
                ChangeSortOrder((ColumnId)evt.newValue);
                SendAnalytics(Analytics.WindowUsageType.ChangeSortBy);
            });
            toolbar.Add(m_SortBySelector);

            var settingsBtn = new Button(() =>
            {
                SettingsService.OpenUserPreferences(PerformanceTrackerSettings.settingsKey);
                SendAnalytics(Analytics.WindowUsageType.OpenPreferences);
            });

            settingsBtn.style.backgroundImage = Icons.settings;
            settingsBtn.style.width           = PtStyles.itemHeight - 3;
            settingsBtn.style.height          = PtStyles.itemHeight - 3;

            toolbar.Add(settingsBtn);

            rootVisualElement.Add(toolbar);

            // Set List View Header:
            m_HeaderRow = new VisualElement();
            m_HeaderRow.AddToClassList("perf-header-row-container");
            m_HeaderRow.style.flexDirection = FlexDirection.Row;
            rootVisualElement.Add(m_HeaderRow);
            CreateHeaders();

            m_PinnedTrackersView      = new ListView(m_PinnedTrackers, PtStyles.itemHeight, MakeItem, BindPinnedItem);
            m_PinnedTrackersView.name = k_PinnedTrackerList;
            m_PinnedTrackersView.AddToClassList("perf-tracker-list");
            m_PinnedTrackersView.selectionType  = SelectionType.Multiple;
            m_PinnedTrackersView.style.flexGrow = 0;
            m_PinnedTrackersView.Q <VisualElement>(null, "unity-scroll-view__content-viewport").RegisterCallback <GeometryChangedEvent>(SyncHeaderAndListsGeometry);
            rootVisualElement.Add(m_PinnedTrackersView);

            m_TrackersView      = new ListView(m_FilteredTrackers, PtStyles.itemHeight, MakeItem, BindUnpinnedItem);
            m_TrackersView.name = k_TrackerList;
            m_TrackersView.AddToClassList("perf-tracker-list");
            m_TrackersView.selectionType  = SelectionType.Multiple;
            m_TrackersView.style.flexGrow = 1.0f;

            m_TrackersView.Q <VisualElement>(null, "unity-scroll-view__content-viewport").RegisterCallback <GeometryChangedEvent>(SyncHeaderAndListsGeometry);

            rootVisualElement.Add(m_TrackersView);

            m_NeedsUpdate = true;
            ScheduleNextRefresh();
            UpdateTrackers();
        }
Beispiel #15
0
        public EventTypeSearchField()
        {
            m_Choices       = new List <EventTypeChoice>();
            m_State         = new Dictionary <long, bool>();
            m_GroupedEvents = new Dictionary <string, List <long> >();

            AppDomain        currentDomain  = AppDomain.CurrentDomain;
            HashSet <string> userAssemblies = new HashSet <string>(ScriptingRuntime.GetAllUserAssemblies());

            foreach (Assembly assembly in currentDomain.GetAssemblies())
            {
                if (userAssemblies.Contains(assembly.GetName().Name + ".dll"))
                {
                    continue;
                }

                try
                {
                    foreach (var type in assembly.GetTypes().Where(t => typeof(EventBase).IsAssignableFrom(t) && !t.ContainsGenericParameters))
                    {
                        // Only select Pointer events on startup
                        AddType(type, IsGenericTypeOf(type, typeof(PointerEventBase <>)));
                    }

                    // Special case for ChangeEvent<>.
                    var implementingTypes = GetAllTypesImplementingOpenGenericType(typeof(INotifyValueChanged <>), assembly).ToList();
                    foreach (var valueChangedType in implementingTypes)
                    {
                        var baseType = valueChangedType.BaseType;
                        if (baseType == null || baseType.GetGenericArguments().Length <= 0)
                        {
                            continue;
                        }

                        var argumentType = baseType.GetGenericArguments()[0];
                        if (!argumentType.IsGenericParameter)
                        {
                            AddType(typeof(ChangeEvent <>).MakeGenericType(argumentType), false);
                        }
                    }
                }
                catch (TypeLoadException e)
                {
                    Debug.LogWarningFormat("Error while loading types from assembly {0}: {1}", assembly.FullName, e);
                }
                catch (ReflectionTypeLoadException e)
                {
                    for (var i = 0; i < e.LoaderExceptions.Length; i++)
                    {
                        if (e.LoaderExceptions[i] != null)
                        {
                            Debug.LogError(e.Types[i] + ": " + e.LoaderExceptions[i].Message);
                        }
                    }
                }
            }

            m_State.Add(0, false);

            // Add groups, with negative ids.
            var keyIndex = -1;

            foreach (var key in m_GroupedEvents.Keys.OrderBy(k => k))
            {
                m_Choices.Add(new EventTypeChoice()
                {
                    Name = key, Group = key, TypeId = keyIndex
                });
                m_State.Add(keyIndex--, key.Contains("IPointerEvent"));
            }

            m_Choices.Sort();
            m_Choices.Insert(0, new EventTypeChoice()
            {
                Name = "IAll", Group = "IAll", TypeId = 0
            });
            m_FilteredChoices = m_Choices.ToList();

            m_MenuContainer = new VisualElement();
            m_MenuContainer.AddToClassList(ussClassName);

            m_OuterContainer = new VisualElement();
            m_OuterContainer.AddToClassList(ussContainerClassName);
            m_MenuContainer.Add(m_OuterContainer);

            m_ListView = new ListView();
            m_ListView.AddToClassList(ussListViewClassName);
            m_ListView.pickingMode                   = PickingMode.Position;
            m_ListView.showBoundCollectionSize       = false;
            m_ListView.fixedItemHeight               = 20;
            m_ListView.selectionType                 = SelectionType.None;
            m_ListView.showAlternatingRowBackgrounds = AlternatingRowBackground.All;

            m_ListView.makeItem = () =>
            {
                var container = new VisualElement();
                container.AddToClassList(ussItemContainerClassName);

                var toggle = new Toggle();
                toggle.labelElement.AddToClassList(ussItemLabelClassName);
                toggle.visualInput.AddToClassList(ussItemToggleClassName);
                toggle.RegisterValueChangedCallback(OnToggleValueChanged);
                container.Add(toggle);

                var label = new Label();
                label.AddToClassList(ussItemCountClassName);
                label.pickingMode = PickingMode.Ignore;
                container.Add(label);

                return(container);
            };

            m_ListView.bindItem = (element, i) =>
            {
                var toggle     = element[0] as Toggle;
                var countLabel = element[1] as Label;
                var choice     = m_FilteredChoices[i];
                toggle.SetValueWithoutNotify(m_State[choice.TypeId]);
                var isGroup = choice.Name == choice.Group;

                toggle.label = isGroup ? $"{choice.Group.Substring(1).Replace("Event", "")} Events" : choice.Name;
                toggle.labelElement.RemoveFromClassList(isGroup ? ussItemLabelClassName : ussGroupLabelClassName);
                toggle.labelElement.AddToClassList(isGroup ? ussGroupLabelClassName : ussItemLabelClassName);
                toggle.userData = i;

                if (m_EventCountLog != null && m_EventCountLog.ContainsKey(choice.TypeId))
                {
                    countLabel.style.display = DisplayStyle.Flex;
                    countLabel.text          = m_EventCountLog[choice.TypeId].ToString();
                }
                else
                {
                    countLabel.text          = "";
                    countLabel.style.display = DisplayStyle.None;
                }
            };

            m_ListView.itemsSource = m_FilteredChoices;
            m_OuterContainer.Add(m_ListView);

            UpdateTextHint();

            m_MenuContainer.RegisterCallback <AttachToPanelEvent>(OnAttachToPanel);
            m_MenuContainer.RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel);
            textInputField.RegisterValueChangedCallback(OnValueChanged);

            RegisterCallback <FocusInEvent>(OnFocusIn);
            RegisterCallback <FocusEvent>(OnFocus);
            RegisterCallback <FocusOutEvent>(OnFocusOut);
        }