Ejemplo n.º 1
0
        /// <summary>
        /// 筛选列表
        /// </summary>
        /// <param name="source">The source.</param>
        /// <returns>List&lt;T&gt;.</returns>
        private List <T> Filter(List <T> source)
        {
            if (GUILayout.Button("F", EditorStyles.toolbarButton, GUILayout.Width(20)))
            {
                PopCustomWindow customWindow = new PopCustomWindow();
                customWindow.DrawGUI = () =>
                {
                    GUILayout.BeginHorizontal("flow overlay box");
                    GUITool.Button("筛选", Color.clear);
                    GUILayout.EndHorizontal();

                    GUILayout.BeginVertical();
                    foreach (var searchFilter in filters)
                    {
                        var show = searchFilter.Show();
                        if (show)
                        {
                            this.SetDirty();
                        }
                    }
                    GUILayout.EndVertical();
                };
                customWindow.PopWindow();
            }

            if (research)
            {
                var list = new List <T>();

                //检索数据,必须满足所有的筛选器
                foreach (var data in source)
                {
                    bool enable = this.filters.All(filter => !filter.IsActive() || filter.RunFilter(data));
                    if (enable)
                    {
                        list.Add(data);
                    }
                }
                return(list);
            }
            return(source);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 排序列表
        /// </summary>
        /// <param name="list">The list.</param>
        /// <returns>List&lt;T&gt;.</returns>
        private List <T> Sort(List <T> list)
        {
            FieldInfo sortFieldInfo = null;

            if (this.sortField.IsNOTNullOrEmpty())
            {
                sortFieldInfo = this.dataType.GetField(this.sortField);
            }

            bool click = false;

            if (sortFieldInfo != null)
            {
                click = GUILayout.Button("Sort:" + this.dataType.GetField(this.sortField).GetBestName(), EditorStyles.toolbarButton);
            }
            else
            {
                click = GUILayout.Button("S", EditorStyles.toolbarButton, GUILayout.Width(20));
            }
            if (click)
            {
                var customWindow = PopCustomWindow.ShowPopWindow();
                customWindow.DrawGUI = () =>
                {
                    GUILayout.BeginVertical();
                    GUILayout.BeginHorizontal("flow overlay box");
                    GUITool.Button("排序", Color.clear);
                    GUILayout.EndHorizontal();
                    var fieldInfos = this.dataType.GetFields(BindingFlags.Instance | BindingFlags.Public);
                    if (GUILayout.Button("默认"))
                    {
                        this.sortField = string.Empty;
                        this.SaveState();
                        customWindow.CloseWindow();
                        this.SetDirty();
                    }
                    foreach (var fieldInfo in fieldInfos)
                    {
                        if (fieldInfo.FieldType == typeof(int) || fieldInfo.FieldType == typeof(string) ||
                            fieldInfo.FieldType == typeof(uint) || fieldInfo.FieldType == typeof(float))
                        {
                            if (GUILayout.Button(fieldInfo.Name))
                            {
                                this.sortField = fieldInfo.Name;
                                this.SaveState();
                                customWindow.CloseWindow();
                                this.SetDirty();
                            }
                        }
                    }
                    GUILayout.EndVertical();
                };
            }
            if (research)
            {
                if (this.sortField.IsNOTNullOrEmpty())
                {
                    list.Sort(
                        (l, r) =>
                    {
                        var fieldInfo = this.dataType.GetField(this.sortField, BindingFlags.Instance | BindingFlags.Public);
                        var lvalue    = fieldInfo.GetValue(l);
                        var rvalue    = fieldInfo.GetValue(r);
                        if (fieldInfo.FieldType == typeof(string))
                        {
                            return(StringComparer.CurrentCulture.Compare(lvalue, rvalue));
                        }
                        if (fieldInfo.FieldType == typeof(uint))
                        {
                            if ((uint)(lvalue) > (uint)(rvalue))
                            {
                                return(1);
                            }
                            if ((uint)(lvalue) < (uint)(rvalue))
                            {
                                return(-1);
                            }
                            return(0);
                        }
                        if (fieldInfo.FieldType == typeof(int))
                        {
                            if ((int)(lvalue) > (int)(rvalue))
                            {
                                return(1);
                            }
                            if ((int)(lvalue) < (int)(rvalue))
                            {
                                return(-1);
                            }
                            return(0);
                        }
                        if (fieldInfo.FieldType == typeof(float))
                        {
                            if ((float)(lvalue) > (float)(rvalue))
                            {
                                return(1);
                            }
                            if ((float)(lvalue) < (float)(rvalue))
                            {
                                return(-1);
                            }
                            return(0);
                        }
                        return(0);
                    });
                }
            }

            return(list);
        }