Пример #1
0
        private IEnumerable <BFUDetailsRowColumn <TItem> > GetJustifiedColumns(IEnumerable <BFUDetailsRowColumn <TItem> > newColumns, CheckboxVisibility newCheckboxVisibility, SelectionMode newSelectionMode, double viewportWidth, int resizingColumnIndex)
        {
            var    rowCheckWidth      = newSelectionMode != SelectionMode.None && newCheckboxVisibility != CheckboxVisibility.Hidden ? 48 : 0; //DetailsRowCheckbox width
            var    groupExpandedWidth = 0;                                                                                                     //skipping this for now.
            double totalWidth         = 0;
            var    availableWidth     = viewportWidth - (rowCheckWidth + groupExpandedWidth);
            int    count = 0;

            System.Collections.Generic.List <BFUDetailsRowColumn <TItem> > adjustedColumns = new System.Collections.Generic.List <BFUDetailsRowColumn <TItem> >();
            foreach (var col in newColumns)
            {
                adjustedColumns.Add(col);
                col.CalculatedWidth = !double.IsNaN(col.MinWidth) ? col.MinWidth : 100;
                if (_columnOverrides.TryGetValue(col.Key, out var overridenWidth))
                {
                    col.CalculatedWidth = overridenWidth;
                }

                var isFirst = count + resizingColumnIndex == 0;
                totalWidth += GetPaddedWidth(col, isFirst);
            }

            var lastIndex = adjustedColumns.Count() - 1;

            // Shrink or remove collapsable columns.
            while (lastIndex > 0 && totalWidth > availableWidth)
            {
                var col           = adjustedColumns.ElementAt(lastIndex);
                var minWidth      = !double.IsNaN(col.MinWidth) ? col.MinWidth : 100;
                var overflowWidth = totalWidth - availableWidth;

                if (col.CalculatedWidth - minWidth >= overflowWidth || !col.IsCollapsible)
                {
                    var originalWidth = col.CalculatedWidth;
                    col.CalculatedWidth = Math.Max(col.CalculatedWidth - overflowWidth, minWidth);
                    totalWidth         -= originalWidth - col.CalculatedWidth;
                }
                else
                {
                    totalWidth -= GetPaddedWidth(col, false);
                    adjustedColumns.RemoveRange(lastIndex, 1);
                }
                lastIndex--;
            }

            //Then expand columns starting at the beginning, until we've filled the width.
            for (var i = 0; i < adjustedColumns.Count && totalWidth < availableWidth; i++)
            {
                var col          = adjustedColumns[i];
                var isLast       = i == adjustedColumns.Count - 1;
                var hasOverrides = _columnOverrides.TryGetValue(col.Key, out var overrides);
                if (hasOverrides && !isLast)
                {
                    continue;
                }

                var    spaceLeft = availableWidth - totalWidth;
                double increment = 0;
                if (isLast)
                {
                    increment = spaceLeft;
                }
                else
                {
                    var maxWidth = col.MaxWidth;
                    var minWidth = !double.IsNaN(col.MinWidth) ? col.MinWidth : (!double.IsNaN(col.MaxWidth) ? col.MaxWidth : 100);
                    increment = !double.IsNaN(maxWidth) ? Math.Min(spaceLeft, maxWidth - minWidth) : spaceLeft;
                }

                col.CalculatedWidth += increment;
                totalWidth          += increment;
            }

            return(adjustedColumns);
        }
Пример #2
0
        private IEnumerable <BFUDetailsRowColumn <TItem> > GetAdjustedColumns(IEnumerable <TItem> newItems, DetailsListLayoutMode newLayoutMode, SelectionMode newSelectionMode, CheckboxVisibility newCheckboxVisibility, IEnumerable <BFUDetailsRowColumn <TItem> > newColumns, bool forceUpdate, int resizingColumnIndex)
        {
            var columns           = Columns.EmptyIfNull();
            var lastWidth         = _lastWidth;
            var lastSelectionMode = _lastSelectionMode;

            if (!forceUpdate && _lastViewport.ScrollWidth == _viewport.ScrollWidth && SelectionMode == newSelectionMode && (Columns == null || newColumns == Columns))
            {
                return(Enumerable.Empty <BFUDetailsRowColumn <TItem> >());
            }

            // skipping default column builder... user must provide columns always

            IEnumerable <BFUDetailsRowColumn <TItem> > adjustedColumns = null;

            if (LayoutMode == DetailsListLayoutMode.FixedColumns)
            {
                adjustedColumns = GetFixedColumns(newColumns);

                foreach (var col in adjustedColumns)
                {
                    _columnOverrides[col.Key] = col.CalculatedWidth;
                }
            }
            else
            {
                if (resizingColumnIndex != -1)
                {
                    adjustedColumns = GetJustifiedColumnsAfterResize(newColumns, newCheckboxVisibility, newSelectionMode, _viewport.ScrollWidth, resizingColumnIndex);
                }
                else
                {
                    adjustedColumns = GetJustifiedColumns(newColumns, newCheckboxVisibility, newSelectionMode, _viewport.ScrollWidth, resizingColumnIndex);
                }

                foreach (var col in adjustedColumns)
                {
                    _columnOverrides[col.Key] = col.CalculatedWidth;
                }
            }



            return(adjustedColumns);
        }
Пример #3
0
        private IEnumerable <BFUDetailsRowColumn <TItem> > GetJustifiedColumnsAfterResize(IEnumerable <BFUDetailsRowColumn <TItem> > newColumns, CheckboxVisibility newCheckboxVisibility, SelectionMode newSelectionMode, double viewportWidth, int resizingColumnIndex)
        {
            var fixedColumns = newColumns.Take(resizingColumnIndex);

            foreach (var col in fixedColumns)
            {
                if (_columnOverrides.TryGetValue(col.Key, out var overridenWidth))
                {
                    col.CalculatedWidth = overridenWidth;
                }
                else
                {
                    col.CalculatedWidth = double.NaN;
                }
            }

            int count      = 0;
            var fixedWidth = fixedColumns.Aggregate <BFUDetailsRowColumn <TItem>, double, double>(0, (total, column) => total + GetPaddedWidth(column, ++count == 0), x => x);

            var remainingColumns = newColumns.Skip(resizingColumnIndex).Take(newColumns.Count() - resizingColumnIndex);
            var remainingWidth   = viewportWidth - fixedWidth;

            var adjustedColumns = GetJustifiedColumns(remainingColumns, newCheckboxVisibility, newSelectionMode, remainingWidth, resizingColumnIndex);

            return(Enumerable.Concat(fixedColumns, adjustedColumns));
        }
Пример #4
0
 private void AdjustColumns(IEnumerable <TItem> newItems, DetailsListLayoutMode newLayoutMode, SelectionMode newSelectionMode, CheckboxVisibility newCheckboxVisibility, IEnumerable <BFUDetailsRowColumn <TItem> > newColumns, bool forceUpdate, int resizingColumnIndex = -1)
 {
     _adjustedColumns = GetAdjustedColumns(newItems, newLayoutMode, newSelectionMode, newCheckboxVisibility, newColumns, forceUpdate, resizingColumnIndex);
 }