private void UpdateSelectors(SortableColumnSelector target = null)
        {
            if (this.Selectors == null)
            {
                this.Selectors = Enumerable.Range(0, selectorNum)
                                 .Select(_ => new SortableColumnSelector {
                    Updated = x => this.UpdateSelectors(x),
                })
                                 .ToArray();
            }

            // nonColumn 以外で選択された列
            var selectedItems = new HashSet <SortableColumn>();
            SortableColumnSelector previous = null;

            // enabled は Selector の SelectableColumns を作り直すかどうか
            // target が指定されていなければ全部、指定されていればその target の次から作り直す
            var enabled = target == null;

            foreach (var selector in this.Selectors)
            {
                if (enabled)
                {
                    var sortables = Columns.Where(x => !selectedItems.Contains(x)).ToList();
                    var current   = selector.Current;

                    if (previous != null && previous.Current == LevelColumn)
                    {
                        // 直前のソート列がレベルだったら、この列は次のレベルまでの経験値にしてあげる
                        sortables.Insert(1, ExpColumn);
                        current = ExpColumn;
                        selector.SafeUpdate(!previous.IsAscending);
                    }

                    selector.SelectableColumns = sortables.ToArray();
                    selector.SafeUpdate(sortables.Contains(current) ? current : sortables.FirstOrDefault());
                }
                else
                {
                    enabled = selector == target;
                }

                if (selector.Current != NoneColumn)
                {
                    selectedItems.Add(selector.Current);
                }

                previous = selector;
            }
        }
Ejemplo n.º 2
0
        private void UpdateSelectors(SortableColumnSelector target = null)
        {
            if (this.Selectors == null)
            {
                this.Selectors = Enumerable.Range(0, selectorNum)
                    .Select(_ => new SortableColumnSelector { Updated = x => this.UpdateSelectors(x), })
                    .ToArray();
            }

            // nonColumn 以外で選択された列
            var selectedItems = new HashSet<SortableColumn>();
            SortableColumnSelector previous = null;

            // enabled は Selector の SelectableColumns を作り直すかどうか
            // target が指定されていなければ全部、指定されていればその target の次から作り直す
            var enabled = target == null;

            foreach (var selector in this.Selectors)
            {
                if (enabled)
                {
                    var sortables = Columns.Where(x => !selectedItems.Contains(x)).ToList();
                    var current = selector.Current;

                    if (previous != null && previous.Current == LevelColumn)
                    {
                        // 直前のソート列がレベルだったら、この列は次のレベルまでの経験値にしてあげる
                        sortables.Insert(1, ExpColumn);
                        current = ExpColumn;
                        selector.SafeUpdate(!previous.IsAscending);
                    }

                    selector.SelectableColumns = sortables.ToArray();
                    selector.SafeUpdate(sortables.Contains(current) ? current : sortables.FirstOrDefault());
                }
                else
                {
                    enabled = selector == target;
                }

                if (selector.Current != NoneColumn)
                {
                    selectedItems.Add(selector.Current);
                }

                previous = selector;
            }
        }