예제 #1
0
        protected virtual float[] MeasureCells(
            GridViewRowInfo row,
            List <GridViewDataColumn> columns,
            float[] widths)
        {
            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);
                for (int index = 0; index < columns.Count; ++index)
                {
                    if (columns[index].IsVisible && columns[index].AutoSizeMode != BestFitColumnMode.None)
                    {
                        GridCellElement element2 = elementProvider1.GetElement((GridViewColumn)columns[index], (object)element1) as GridCellElement;
                        element1.Children.Add((RadElement)element2);
                        element2.Initialize((GridViewColumn)columns[index], element1);
                        element2.SetContent();
                        element2.UpdateInfo();
                        (element2 as GridHeaderCellElement)?.UpdateArrowState();
                        element2.ResetLayout(true);
                        widths[index] = Math.Max(widths[index], this.GetCellDesiredWidth(element2));
                        element1.Children.Remove((RadElement)element2);
                        this.Detach(elementProvider1, element2);
                    }
                }
                this.TableElement.Children.Remove((RadElement)element1);
                this.Detach(elementProvider2, element1);
            }
            return(widths);
        }
 protected override void CreateChildElements()
 {
     this.elementProvider = this.CreateElementProvider();
     this.scroller        = this.CreateItemScroller();
     base.CreateChildElements();
     this.InitializeItemScroller(this.scroller);
     this.HScrollBar.Maximum = 0;
     this.WireEvents();
 }
예제 #3
0
        protected virtual float CalculateColumnWidth(
            ListViewDetailColumn column,
            ListViewBestFitColumnMode mode)
        {
            IVirtualizedElementProvider <ListViewDataItem> elementProvider = this.DetailListView.Scroller.ElementProvider;
            float val1 = 0.0f;

            if (mode == ListViewBestFitColumnMode.HeaderCells || mode == ListViewBestFitColumnMode.AllCells)
            {
                DetailListViewHeaderCellElement element = this.DetailListView.ColumnScroller.ElementProvider.GetElement(column, (object)null) as DetailListViewHeaderCellElement;
                this.DetailListView.ColumnContainer.Children.Add((RadElement)element);
                element.Attach(column, (object)null);
                element.ResetLayout(true);
                val1 = Math.Max(val1, this.GetCellDesiredWidth((DetailListViewCellElement)element));
                this.DetailListView.ColumnContainer.Children.Remove((RadElement)element);
                this.Detach(this.DetailListView.ColumnScroller.ElementProvider, (DetailListViewCellElement)element);
                if (mode == ListViewBestFitColumnMode.HeaderCells)
                {
                    return(val1);
                }
            }
            IEnumerator <ListViewDataItem> enumerator = (IEnumerator <ListViewDataItem>)null;

            if (mode == ListViewBestFitColumnMode.DataCells || mode == ListViewBestFitColumnMode.AllCells)
            {
                enumerator = (IEnumerator <ListViewDataItem>) new ListViewTraverser(this.DetailListView.Owner);
            }
            enumerator.Reset();
            while (enumerator.MoveNext())
            {
                ListViewDataItem current = enumerator.Current;
                if (this.CanBestFitItem(current))
                {
                    DetailListViewVisualItem element1 = elementProvider.GetElement(current, (object)null) as DetailListViewVisualItem;
                    element1.Attach(current, (object)null);
                    this.DetailListView.ColumnContainer.Children.Add((RadElement)element1);
                    IVirtualizedElementProvider <ListViewDetailColumn> cellElementProvider = (IVirtualizedElementProvider <ListViewDetailColumn>) new DetailListViewDataCellElementProvider(element1);
                    DetailListViewCellElement element2 = cellElementProvider.GetElement(column, (object)element1) as DetailListViewCellElement;
                    element1.Children.Add((RadElement)element2);
                    element2.Attach(column, (object)element1);
                    element2.ResetLayout(true);
                    val1 = Math.Max(val1, this.GetCellDesiredWidth(element2));
                    element1.Children.Remove((RadElement)element2);
                    this.DetailListView.ColumnContainer.Children.Remove((RadElement)element1);
                    this.Detach(cellElementProvider, element2);
                    this.Detach(elementProvider, element1);
                }
            }
            return(val1);
        }
예제 #4
0
        protected internal virtual int GetDataRowHeight(
            GridViewRowInfo row,
            TableViewRowLayoutBase rowLayout)
        {
            if (!this.GridView.AutoSizeRows)
            {
                return(rowLayout.GetRowHeight(row));
            }
            IVirtualizedElementProvider <GridViewColumn>  elementProvider1 = this.GridView.TableElement.ColumnScroller.ElementProvider;
            IVirtualizedElementProvider <GridViewRowInfo> elementProvider2 = this.GridView.TableElement.RowScroller.ElementProvider;
            float          val1     = 0.0f;
            GridRowElement element1 = elementProvider2.GetElement(row, (object)null) as GridRowElement;

            element1.InitializeRowView(this.GridView.TableElement);
            element1.Initialize(row);
            this.GridView.TableElement.Children.Add((RadElement)element1);
            if (row is GridViewGroupRowInfo)
            {
                GridGroupHeaderRowElement headerRowElement = element1 as GridGroupHeaderRowElement;
                headerRowElement.Measure(new SizeF(rowLayout.DesiredSize.Width, float.PositiveInfinity));
                val1 = Math.Max(val1, headerRowElement.DesiredSize.Height);
            }
            else
            {
                foreach (GridViewColumn column in (Collection <GridViewDataColumn>)row.ViewTemplate.Columns)
                {
                    if (!(column is GridViewRowHeaderColumn) && !(column is GridViewIndentColumn) && column.IsVisible)
                    {
                        GridCellElement element2 = elementProvider1.GetElement(column, (object)element1) as GridCellElement;
                        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.GetCellDesiredSize(element2).Height);
                        element1.Children.Remove((RadElement)element2);
                        this.Detach(elementProvider1, element2);
                    }
                }
            }
            this.GridView.TableElement.Children.Remove((RadElement)element1);
            this.Detach(elementProvider2, element1);
            return((int)val1);
        }
예제 #5
0
 private void Detach(
     IVirtualizedElementProvider <ListViewDataItem> itemElementProvider,
     DetailListViewVisualItem item)
 {
     if (item != null)
     {
         itemElementProvider.CacheElement((IVirtualizedElement <ListViewDataItem>)item);
         item.Detach();
         if (item.Parent == null || !item.Parent.Children.Contains((RadElement)item))
         {
             return;
         }
         item.Parent.Children.Remove((RadElement)item);
     }
     else
     {
         item.Dispose();
     }
 }
예제 #6
0
 private void Detach(
     IVirtualizedElementProvider <ListViewDetailColumn> cellElementProvider,
     DetailListViewCellElement cell)
 {
     if (cell != null)
     {
         cellElementProvider.CacheElement((IVirtualizedElement <ListViewDetailColumn>)cell);
         cell.Detach();
         if (cell.Parent == null || !cell.Parent.Children.Contains((RadElement)cell))
         {
             return;
         }
         cell.Parent.Children.Remove((RadElement)cell);
     }
     else
     {
         cell.Dispose();
     }
 }
예제 #7
0
        private void BestFitGroupColumn(
            GridViewGroupColumn column,
            bool bestFitChildColumns,
            BestFitColumnMode?mode)
        {
            GridTableHeaderRowElement headerRowElement = this.GetHeaderRowElement();
            IVirtualizedElementProvider <GridViewColumn> elementProvider = this.tableElement.ColumnScroller.ElementProvider;
            ColumnGroupRowLayout rowLayout = this.tableElement.ViewElement.RowLayout as ColumnGroupRowLayout;

            if (rowLayout == null || headerRowElement == null)
            {
                return;
            }
            GridColumnGroupCellElement element = elementProvider.GetElement((GridViewColumn)column, (object)headerRowElement) as GridColumnGroupCellElement;

            if (element == null || !element.CanBestFit(column.AutoSizeMode))
            {
                return;
            }
            float num = this.MeasureCell((GridRowElement)headerRowElement, (GridViewColumn)column, element);

            this.Detach(elementProvider, (GridCellElement)element);
            ColumnGroupsCellArrangeInfo columnData = rowLayout.GetColumnData((GridViewColumn)column);

            if ((double)columnData.Bounds.Width < (double)num)
            {
                rowLayout.StartColumnResize((GridViewColumn)column);
                rowLayout.ResizeColumn((int)((double)num - (double)columnData.Bounds.Width));
                rowLayout.InvalidateLayout();
                this.TableElement.ViewElement.InvalidateMeasure(true);
                this.TableElement.ViewElement.UpdateLayout();
                rowLayout.EndColumnResize();
            }
            if (!bestFitChildColumns)
            {
                return;
            }
            foreach (GridViewColumn dataColumn in this.GetDataColumns(column.Group))
            {
                this.BestFitColumnCore(dataColumn, mode.HasValue ? mode.Value : column.AutoSizeMode);
            }
        }
예제 #8
0
        private void Detach(
            IVirtualizedElementProvider <GridViewRowInfo> rowElementProvider,
            GridRowElement row)
        {
            GridVirtualizedRowElement virtualizedRowElement = row as GridVirtualizedRowElement;

            if (virtualizedRowElement != null)
            {
                rowElementProvider.CacheElement((IVirtualizedElement <GridViewRowInfo>)virtualizedRowElement);
                virtualizedRowElement.Detach();
                if (virtualizedRowElement.Parent == null || !virtualizedRowElement.Parent.Children.Contains((RadElement)virtualizedRowElement))
                {
                    return;
                }
                virtualizedRowElement.Parent.Children.Remove((RadElement)virtualizedRowElement);
            }
            else
            {
                row.Dispose();
            }
        }
예제 #9
0
        private void Detach(
            IVirtualizedElementProvider <GridViewColumn> cellElementProvider,
            GridCellElement cell)
        {
            GridVirtualizedCellElement virtualizedCellElement = cell as GridVirtualizedCellElement;

            if (virtualizedCellElement != null)
            {
                cellElementProvider.CacheElement((IVirtualizedElement <GridViewColumn>)virtualizedCellElement);
                virtualizedCellElement.Detach();
                if (virtualizedCellElement.Parent == null || !virtualizedCellElement.Parent.Children.Contains((RadElement)virtualizedCellElement))
                {
                    return;
                }
                virtualizedCellElement.Parent.Children.Remove((RadElement)virtualizedCellElement);
            }
            else
            {
                cell.Dispose();
            }
        }
예제 #10
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);
        }