private void DeleteRule(VisualElement child)
        {
            var optionsPanel = (child as FolderRuleOptionsPanel) ?? child.Q <FolderRuleOptionsPanel>() ??
                               child.GetFirstAncestorOfType <FolderRuleOptionsPanel>();

            if (optionsPanel == null)
            {
                return;
            }
            var boundRule = optionsPanel.TempRule.rule;

            _settings.Rules.RemoveAll(r => ReferenceEquals(boundRule, r));
            _srlSettings.Update();
            ListView listView = _rulesListQ.First();

            listView?.Refresh();
        }
        public override void OnActivate(string searchContext, VisualElement rootElement)
        {
            // This function is called when the user clicks on the MyCustom element in the Settings window.
            _settings    = PvCustomizerSettings.GetOrCreateSettings();
            _srlSettings = new SerializedObject(_settings);
            keywords     = GetSearchKeywordsFromSerializedObject(_srlSettings);

            var tree = Resource.Load <VisualTreeAsset>("UXML/PvCustomizerSettingsProvider_UXML.uxml");

            tree.CloneTree(rootElement);

            #region images

            rootElement.Q(className: "logo").style.backgroundImage =
                new StyleBackground(Resource.Load <Texture2D>("Icons/logo.png"));

            #endregion

            #region list-view

            _rulesListQ = rootElement.Query <ListView>().Name("rulesList");
            ListView rulesList = _rulesListQ.First();
            rulesList.bindItem = (vi, i) =>
            {
                FolderRuleOptionsPanel optionsPanel = vi.Q <FolderRuleOptionsPanel>();
                if (i >= 0 && _settings.Rules.Count > i)
                {
                    optionsPanel.SetEnabled(true);
                    SerializedRule serializedRule = ScriptableObject.CreateInstance <SerializedRule>();
                    serializedRule.rule = _settings.Rules[i];
                    optionsPanel.SetCurrentBound(serializedRule, null);
                }
                else
                {
                    optionsPanel.SetEnabled(false);
                }
            };

            rulesList.makeItem = () =>
            {
                var child = Resource.Load <VisualTreeAsset>("UXML/FolderRuleOptionsPanel_UXML.uxml").CloneTree();
                child.style.paddingTop        = 5;
                child.style.paddingBottom     = 5;
                child.style.borderBottomWidth = 3;
                child.style.borderBottomColor = Color.black;

                var optionsPanel = child.Q <FolderRuleOptionsPanel>();

                optionsPanel.Q <Button>("btn_Reset")?.RemoveFromHierarchy();
                optionsPanel.Q <Button>("btn_Cancel")?.RemoveFromHierarchy();
                optionsPanel.Q <Button>("btn_Apply")?.RemoveFromHierarchy();
                optionsPanel.Q <Button>("btn_Settings")?.RemoveFromHierarchy();
                optionsPanel.Q("tag-holder").RemoveFromHierarchy();

                optionsPanel.OnDelete = () => DeleteRule(child);

                return(child);
            };
            rulesList.style.flexGrow = 1;
            rulesList.Refresh();

            #endregion

            #region tint example + imgui

            _tintExampleContainer = rootElement.Q <IMGUIContainer>("tintExample");
            _tintExampleContainer.onGUIHandler += DrawTintExample;

            #endregion

            rootElement.Bind(_srlSettings);
        }