コード例 #1
0
 public void ProcessRequests()
 {
     if (this.processing > 0 || this.tableElement == null || this.tableElement.ViewTemplate == null)
     {
         return;
     }
     ++this.processing;
     if (this.BestFitQueue.Count == 0 || !this.TableElement.CanBestFit())
     {
         --this.processing;
     }
     else
     {
         this.TableElement.UpdateLayout();
         if (this.TableElement.VisualRows.Count == 0 || this.tableElement.ViewTemplate == null || this.TableElement.ViewTemplate.Columns.Count == 0)
         {
             --this.processing;
         }
         else if (this.TableElement.ViewInfo.ParentRow != null && this.TableElement.DesiredSize == SizeF.Empty)
         {
             this.TableElement.GridViewElement.UpdateLayout();
             --this.processing;
         }
         else
         {
             this.updateRowsHeight = false;
             while (this.BestFitQueue.Count > 0)
             {
                 BestFitQueue.BestFitRequest bestFitRequest = this.BestFitQueue.Dequeue();
                 BestFitColumnMode?          autoSizeMode   = bestFitRequest.AutoSizeMode;
                 if (bestFitRequest.Operation == BestFitQueue.BestFitOperation.BestFitAllColumns)
                 {
                     this.BestFitColumnsCore(autoSizeMode);
                 }
                 else
                 {
                     GridViewGroupColumn column = bestFitRequest.Column as GridViewGroupColumn;
                     if (column != null)
                     {
                         this.BestFitGroupColumn(column, true, new BestFitColumnMode?());
                     }
                     else
                     {
                         BestFitColumnMode mode = autoSizeMode.HasValue ? autoSizeMode.Value : bestFitRequest.Column.AutoSizeMode;
                         this.BestFitColumnCore(bestFitRequest.Column, mode);
                     }
                 }
             }
             this.UpdateLayout();
             this.SynchronizeViews();
             --this.processing;
         }
     }
 }
コード例 #2
0
        protected virtual void BestFitColumnCore(GridViewColumn column, BestFitColumnMode mode)
        {
            if (column == null)
            {
                throw new ArgumentNullException(nameof(column));
            }
            if (mode == BestFitColumnMode.None || !column.IsVisible)
            {
                return;
            }
            float columnWidth = this.CalculateColumnWidth(column, mode);

            this.SetColumnWidth(column, columnWidth);
        }
コード例 #3
0
        protected virtual float MeasureCell(
            GridViewRowInfo row,
            GridViewColumn column,
            BestFitColumnMode mode)
        {
            float val1 = 0.0f;
            IVirtualizedElementProvider <GridViewColumn>  elementProvider1 = this.tableElement.ColumnScroller.ElementProvider;
            IVirtualizedElementProvider <GridViewRowInfo> elementProvider2 = this.tableElement.RowScroller.ElementProvider;

            if (this.CanBestFitRow(row))
            {
                GridRowElement element1 = elementProvider2.GetElement(row, (object)null) as GridRowElement;
                element1.InitializeRowView(this.TableElement);
                this.TableElement.Children.Add((RadElement)element1);
                element1.Initialize(row);
                GridCellElement element2 = elementProvider1.GetElement(column, (object)element1) as GridCellElement;
                if (!element2.CanBestFit(mode))
                {
                    this.Detach(elementProvider1, element2);
                    this.Detach(elementProvider2, element1);
                    return(val1);
                }
                element1.Children.Add((RadElement)element2);
                element2.Initialize(column, element1);
                element2.SetContent();
                element2.UpdateInfo();
                (element2 as GridHeaderCellElement)?.UpdateArrowState();
                element2.ResetLayout(true);
                val1 = Math.Max(val1, this.GetCellDesiredWidth(element2));
                element1.Children.Remove((RadElement)element2);
                this.TableElement.Children.Remove((RadElement)element1);
                this.Detach(elementProvider1, element2);
                this.Detach(elementProvider2, element1);
            }
            return(val1);
        }
コード例 #4
0
        protected virtual float CalculateColumnWidth(GridViewColumn column, BestFitColumnMode mode)
        {
            float val1 = 0.0f;
            IEnumerator <GridViewRowInfo> enumerator;

            if (mode == BestFitColumnMode.AllCells)
            {
                enumerator = (IEnumerator <GridViewRowInfo>) new ExpandedRowTraverser(this.tableElement.ViewInfo);
                foreach (GridViewRowInfo row in column.OwnerTemplate.Rows)
                {
                    val1 = Math.Max(val1, this.MeasureCell(row, column, mode));
                }
            }
            else
            {
                enumerator = (IEnumerator <GridViewRowInfo>) new VisualRowEnumerator(this.tableElement.VisualRows);
            }
            enumerator.Reset();
            while (enumerator.MoveNext())
            {
                val1 = Math.Max(val1, this.MeasureCell(enumerator.Current, column, mode));
            }
            return(val1);
        }
コード例 #5
0
 public void BestFitColumns(BestFitColumnMode mode)
 {
     this.BestFitQueue.EnqueueBestFitColumns(mode);
     this.ProcessRequests();
 }
コード例 #6
0
 public void EnqueueBestFitColumns(BestFitColumnMode mode)
 {
     this.ClearBestFitColumnRequests(new BestFitColumnMode?(mode));
     this.bestFitRequests.AddLast(new BestFitQueue.BestFitRequest(BestFitQueue.BestFitOperation.BestFitAllColumns, mode));
 }
コード例 #7
0
        protected virtual void BestFitColumnsCore(BestFitColumnMode?mode)
        {
            BestFitColumnMode?nullable = mode;

            if ((nullable.GetValueOrDefault() != BestFitColumnMode.None ? 0 : (nullable.HasValue ? 1 : 0)) != 0)
            {
                return;
            }
            List <GridViewDataColumn> columns     = new List <GridViewDataColumn>((IEnumerable <GridViewDataColumn>) this.tableElement.ViewTemplate.Columns);
            ColumnGroupRowLayout      groupLayout = this.TableElement.ViewElement.RowLayout as ColumnGroupRowLayout;

            if (groupLayout != null)
            {
                columns.Sort((Comparison <GridViewDataColumn>)((A, B) =>
                {
                    ColumnGroupsCellArrangeInfo columnData1 = groupLayout.GetColumnData((GridViewColumn)A);
                    ColumnGroupsCellArrangeInfo columnData2 = groupLayout.GetColumnData((GridViewColumn)B);
                    if (columnData1 == columnData2)
                    {
                        return(0);
                    }
                    if (columnData1 == null)
                    {
                        return(-1);
                    }
                    if (columnData2 == null)
                    {
                        return(1);
                    }
                    int num1 = columnData1.Group.Rows.IndexOf(columnData1.Row);
                    int num2 = columnData2.Group.Rows.IndexOf(columnData2.Row);
                    if (columnData1.Group != columnData2.Group)
                    {
                        return(columnData1.Bounds.X.CompareTo(columnData2.Bounds.X));
                    }
                    if (num1 != num2)
                    {
                        return(num1.CompareTo(num2));
                    }
                    return(columnData1.Bounds.X.CompareTo(columnData2.Bounds.X));
                }));
            }
            float[] numArray = new float[this.tableElement.ViewTemplate.ColumnCount];
            int     index1   = -1;

            if (mode.HasValue && mode.Value == BestFitColumnMode.AllCells)
            {
                numArray = this.CalculateColumnWidths(columns);
            }
            else
            {
                foreach (GridViewColumn column in columns)
                {
                    if (!(column is GridViewGroupColumn))
                    {
                        ++index1;
                        BestFitColumnMode mode1 = mode.HasValue ? mode.Value : column.AutoSizeMode;
                        if (column.IsVisible && mode1 != BestFitColumnMode.None)
                        {
                            float columnWidth = this.CalculateColumnWidth(column, mode1);
                            float val1        = numArray[index1];
                            numArray[index1] = Math.Max(val1, columnWidth);
                        }
                    }
                }
            }
            for (int index2 = 0; index2 < numArray.Length; ++index2)
            {
                GridViewColumn column = (GridViewColumn)columns[index2];
                if (column != null && column.IsVisible && column.AutoSizeMode != BestFitColumnMode.None && ((!column.IsGrouped || column.OwnerTemplate.ShowGroupedColumns) && column.CanStretch))
                {
                    this.SetColumnWidth(column, numArray[index2]);
                }
            }
            if (this.tableElement.ViewTemplate.AutoSizeColumnsMode == GridViewAutoSizeColumnsMode.Fill)
            {
                return;
            }
            this.BestFitGroupColumns(mode);
        }
コード例 #8
0
 public BestFitRequest(BestFitQueue.BestFitOperation operation, BestFitColumnMode mode)
     : this(operation)
 {
     this.autoSizeMode = new BestFitColumnMode?(mode);
 }
コード例 #9
0
 internal override bool CanBestFit(BestFitColumnMode bestFitMode)
 {
     return((bestFitMode & BestFitColumnMode.DisplayedDataCells) > (BestFitColumnMode)0);
 }
コード例 #10
0
 internal override bool CanBestFit(BestFitColumnMode bestFitMode)
 {
     return((bestFitMode & BestFitColumnMode.SummaryRowCells) > (BestFitColumnMode)0);
 }
コード例 #11
0
 internal override bool CanBestFit(BestFitColumnMode bestFitMode)
 {
     return((bestFitMode & BestFitColumnMode.FilterCells) > (BestFitColumnMode)0);
 }
コード例 #12
0
ファイル: GridCellElement.cs プロジェクト: RichardHaggard/BDC
 internal virtual bool CanBestFit(BestFitColumnMode bestFitMode)
 {
   return true;
 }