private void OnEnable()
 {
     // catch refrences
     appliedSeachFilters = new EditorFilters();
     MyData = new SessionData();
     // Reload Profiles
     capturedControllerObj = RuleSystemUtil.CollectRuleSytemObjects();
 }
Exemple #2
0
        /// <summary>
        /// Creates a searchbar that recognizes <see cref="EditorFilter"/> and returns updated <see cref="EditorFilters"/>.
        /// </summary>
        /// <param name="filters"> Object containing filters for searchbar</param>
        /// <param name="skin">Custom editor skin</param>
        /// <returns>updated filters</returns>
        private static EditorFilters DrawFilterableSearchbar(EditorFilters filters, Filter[] availableFilters, GUISkin skin)
        {
            GUILayout.BeginHorizontal(GUILayout.Height(25));
            GUILayout.Label("", skin.GetStyle("Search"), GUILayout.Width(25));
            filters.Search = GUILayout.TextField(filters.Search, skin.textField, GUILayout.Width(150));
            if (GUILayout.Button("", skin.GetStyle("FilterManager"), GUILayout.Width(20), GUILayout.Height(25)))
            {
                EditorLabelManager window = EditorWindow.GetWindow <EditorLabelManager>();
                window.ShowUtility();
            }
            GUILayout.EndHorizontal();

            if (filters.Search != string.Empty)
            {
                foreach (Filter filter in availableFilters)
                {
                    if (filter.Name.ToUpper().Contains(filters.Search.ToUpper()))
                    {
                        var prevBg = GUI.backgroundColor;
                        GUI.backgroundColor = filter.Color;
                        Vector2 textDimension = skin.GetStyle("Filter").CalcSize(new GUIContent(filter.Name));
                        GUILayout.Label("Found Filters: ");
                        if (GUILayout.Button(filter.Name, skin.GetStyle("Filter"), GUILayout.Width(150), GUILayout.Width(textDimension.x)))
                        {
                            filters.Filters.Add(filter);
                            filters.Search = string.Empty;
                        }
                        GUI.backgroundColor = prevBg;
                    }
                }
            }

            if (filters.Filters.Count > 0)
            {
                GUILayout.Label("Filters:");
                GUILayout.BeginHorizontal(GUILayout.MaxWidth(150));
                foreach (Filter appliedFilter in filters.Filters)
                {
                    Vector2 textDimension = skin.GetStyle("Filter").CalcSize(new GUIContent(appliedFilter.Name));
                    var     prevBg        = GUI.backgroundColor;
                    GUI.backgroundColor = appliedFilter.Color;
                    if (GUILayout.Button(appliedFilter.Name, skin.GetStyle("Filter"), GUILayout.Width(textDimension.x)))
                    {
                        filters.Filters.Remove(appliedFilter);
                        break;
                    }
                    GUI.backgroundColor = prevBg;
                }
                GUILayout.EndHorizontal();
            }
            filters.Search.Trim();
            return(filters);
        }
Exemple #3
0
        /// <summary>
        /// Draw's button list of objects with a <see cref="RuleController"/> in defined area.
        /// </summary>
        /// <param name="controllerObjs">Array of controllers that should be drawn.</param>
        /// <param name="layoutArea">Designated area where controllers are drawn into.</param>
        /// <param name="appliedFilters">Search filters applied to Library.</param>
        /// <param name="skin"><see cref="GUISkin"/> style for GUI elements.</param>
        /// <returns>Serialized controller if user selects one. Else null is returned.</returns>
        public static SerializedObject DrawControllerLayout(SerializedObject[] controllerObjs, Rect layoutArea, ref SessionData data, ref EditorFilters appliedFilters, GUISkin skin)
        {
            List <SerializedObject> controllersToDraw = new List <SerializedObject>();

            GUILayout.BeginArea(layoutArea, skin.window);
            // Draw Searchbar
            appliedFilters = DrawFilterableSearchbar(appliedFilters, RuleEditorSettings.Instance.ProfileFilters, skin);
            // apply filters
            controllersToDraw = FilterControllers(controllerObjs, appliedFilters);

            GUILayout.Space(15);

            // Draw  controllers.
            foreach (TypeFilter controllerType in Enum.GetValues(typeof(TypeFilter)))
            {
                List <SerializedObject> controllersByType = new List <SerializedObject>();
                foreach (SerializedObject controller in controllersToDraw)
                {
                    if ((controller.targetObject as RuleController).Profile.MyFilters.Type == controllerType)
                    {
                        controllersByType.Add(controller);
                    }
                }
                if (controllersByType.Count > 0)
                {
                    if (!data.isProfileTypeToggled.ContainsKey(controllerType))
                    {
                        data.isProfileTypeToggled.Add(controllerType, false);
                    }
                    data.isProfileTypeToggled[controllerType] = GUILayout.Toggle(data.isProfileTypeToggled[controllerType], controllerType.ToString(), skin.toggle, GUILayout.Height(20));
                    GUILayout.Label("", skin.GetStyle("HorizontalDivider"));
                    if (data.isProfileTypeToggled[controllerType])
                    {
                        foreach (SerializedObject controller in controllersByType)
                        {
                            var prevBG = GUI.backgroundColor;
                            if (data.selectedController != null && data.selectedController.targetObject == controller.targetObject)
                            {
                                GUI.backgroundColor = Color.green;
                            }
                            skin.button.normal.textColor = (PrefabUtility.GetPrefabParent(controller.targetObject) == null) ? Color.cyan : Color.white;
                            if (GUILayout.Button(controller.targetObject.name, skin.button, GUILayout.Height(25)))
                            {
                                return(controller);
                            }
                            skin.button.normal.textColor = Color.white;
                            GUI.backgroundColor          = prevBG;
                        }
                    }
                }
            }
            GUILayout.EndArea();
            return(null);
        }
Exemple #4
0
        /// <summary>
        /// Creates a <see cref="SerializedObject"/> list of controllers when <see cref="EditorFilters"/> are applied.
        /// </summary>
        /// <param name="controllerPool">Pool of controllers that should be filtered.</param>
        /// <param name="filters"></param>
        /// <returns>Filtered List.</returns>
        private static List <SerializedObject> FilterControllers(SerializedObject[] controllerPool, EditorFilters filters)
        {
            List <SerializedObject> filteredControllers = new List <SerializedObject>();
            List <SerializedObject> searchedControllers = new List <SerializedObject>();

            if (filters.Filters.Count > 0)
            {
                foreach (SerializedObject controller in controllerPool)
                {
                    var objFilters = (controller.targetObject as RuleController).Profile.MyFilters;
                    foreach (Filter appliedFilter in filters.Filters)
                    {
                        if (objFilters.Filters.Contains(appliedFilter))
                        {
                            filteredControllers.Add(controller);
                            break;
                        }
                    }
                }
            }
            if (filters.Search.Length > 0)
            {
                List <SerializedObject> controllersToSearch = new List <SerializedObject>();
                // if no filter. then search through all controllers
                if (filteredControllers.Count == 0)
                {
                    controllersToSearch.AddRange(controllerPool);
                }
                else
                {
                    controllersToSearch.AddRange(filteredControllers);
                    filteredControllers.Clear();
                }
                foreach (SerializedObject controller in controllersToSearch)
                {
                    if (controller.targetObject.name.ToUpper().Contains(filters.Search.ToUpper()))
                    {
                        searchedControllers.Add(controller);
                    }
                }
            }
            if (filteredControllers.Count > 0)
            {
                return(filteredControllers);
            }
            if (searchedControllers.Count > 0)
            {
                return(searchedControllers);
            }
            else if (filters.Filters.Count > 0 || filters.Search.Length > 0)
            {
                return(new List <SerializedObject>());
            }
            else
            {
                return(new List <SerializedObject>(controllerPool));
            }
        }