Esempio n. 1
0
        protected override int FindCompatibleElement(int position, ListViewDataItem data)
        {
            if (data is ListViewDataItemGroup)
            {
                for (int i = position + 1; i < this.Children.Count; i++)
                {
                    BaseListViewGroupVisualItem visualGroupItem = this.Children[i] as BaseListViewGroupVisualItem;
                    if (visualGroupItem != null)
                    {
                        return(i);
                    }
                }

                return(-1);
            }

            if (data is ListViewDataItem)
            {
                for (int i = position + 1; i < this.Children.Count; i++)
                {
                    BaseListViewVisualItem visualItem = (BaseListViewVisualItem)this.Children[i];
                    if (visualItem.Data.GetType() == data.GetType())
                    {
                        return(i);
                    }
                }
                return(-1);
            }

            return(-1);
        }
Esempio n. 2
0
        protected override bool MeasureElement(IVirtualizedElement <ListViewDataItem> element)
        {
            RadElement element1 = element as RadElement;
            BaseListViewGroupVisualItem viewGroupVisualItem = element as BaseListViewGroupVisualItem;

            if (element1 == null)
            {
                return(false);
            }
            SizeF sizeF = this.MeasureElementCore(element1, this.clientRect.Size);
            bool  flag  = true;

            if (this.Orientation == Orientation.Vertical)
            {
                if ((double)this.currentX + (double)sizeF.Width > (double)this.clientRect.Right)
                {
                    this.currentX      = this.clientRect.X;
                    this.currentY     += this.maxItemHeight;
                    this.maxItemHeight = 0.0f;
                    if ((double)this.currentY >= (double)this.clientRect.Bottom)
                    {
                        flag = false;
                    }
                }
                this.currentX     += sizeF.Width;
                this.maxItemHeight = Math.Max(this.maxItemHeight, sizeF.Height);
            }
            else if (viewGroupVisualItem != null)
            {
                this.currentY     = this.clientRect.Y;
                this.currentX    += this.maxItemWidth + (float)this.owner.GroupIndent;
                this.maxItemWidth = 0.0f;
                if ((double)this.currentX >= (double)this.clientRect.Right)
                {
                    flag = false;
                }
            }
            else
            {
                if ((double)this.currentY + (double)sizeF.Height > (double)this.clientRect.Bottom)
                {
                    this.currentY     = this.clientRect.Y;
                    this.currentX    += this.maxItemWidth;
                    this.maxItemWidth = 0.0f;
                    if ((double)this.currentX >= (double)this.clientRect.Right)
                    {
                        flag = false;
                    }
                }
                this.currentY    += sizeF.Height;
                this.maxItemWidth = Math.Max(this.maxItemWidth, sizeF.Width);
            }
            this.cachedDesiredSize.Width  = Math.Max(this.cachedDesiredSize.Width, this.currentX + sizeF.Width);
            this.cachedDesiredSize.Height = Math.Max(this.cachedDesiredSize.Height, this.currentY + sizeF.Height);
            return(flag);
        }
Esempio n. 3
0
        private void MeasureGroupElement(BaseListViewGroupVisualItem groupElement)
        {
            ListViewDataItemGroup data = groupElement.Data as ListViewDataItemGroup;

            if (groupElement.HasVisibleItems())
            {
                int   itemSpacing = this.owner.ItemSpacing;
                float num1        = 0.0f;
                float width       = 0.0f;
                float val1        = 0.0f;
                int   num2        = 1;
                foreach (ListViewDataItem listViewDataItem in data.Items)
                {
                    float num3 = num1 + (float)listViewDataItem.ActualSize.Height;
                    if (num2 > 1)
                    {
                        num3 += (float)itemSpacing;
                    }
                    if ((double)num3 > (double)this.clientRect.Height)
                    {
                        num1   = 0.0f;
                        num2   = 1;
                        width += val1;
                        if (this.owner.Orientation == Orientation.Horizontal)
                        {
                            width += (float)itemSpacing;
                        }
                        val1 = 0.0f;
                    }
                    num1 += (float)listViewDataItem.ActualSize.Height;
                    if (num2 > 1)
                    {
                        num1 += (float)itemSpacing;
                    }
                    val1 = Math.Max(val1, (float)listViewDataItem.ActualSize.Width);
                    ++num2;
                }
                if ((double)val1 > 0.0)
                {
                    width += val1;
                }
                int num4 = !this.owner.Owner.AllowArbitraryItemHeight || data.Size.Height <= 0 ? this.owner.GroupItemSize.Height : data.Size.Height;
                groupElement.Measure(new SizeF(width, (float)num4));
            }
            else
            {
                groupElement.Measure(this.clientRect.Size);
                this.currentX += groupElement.DesiredSize.Width;
                this.currentY  = this.clientRect.Top;
            }
        }
Esempio n. 4
0
 protected override void MeasureElements()
 {
     if (this.Grouped && this.Orientation == Orientation.Horizontal)
     {
         int         position   = 0;
         IEnumerator enumerator = this.DataProvider.GetEnumerator();
         if (!enumerator.MoveNext())
         {
             return;
         }
         ListViewDataItem current1 = enumerator.Current as ListViewDataItem;
         if (current1 is ListViewDataItemGroup)
         {
             this.currentX += (float)this.owner.GroupIndent;
         }
         ListViewDataItemGroup current2          = enumerator.Current as ListViewDataItemGroup;
         ListViewDataItemGroup viewDataItemGroup = current2 ?? current1.Group;
         if (current2 != null)
         {
             enumerator.MoveNext();
         }
         bool flag = true;
         do
         {
             BaseListViewGroupVisualItem groupElement = (BaseListViewGroupVisualItem)null;
             if (viewDataItemGroup != null && viewDataItemGroup.Visible)
             {
                 groupElement      = this.UpdateElement(position, (ListViewDataItem)viewDataItemGroup) as BaseListViewGroupVisualItem;
                 viewDataItemGroup = (ListViewDataItemGroup)null;
                 ++position;
             }
             do
             {
                 ListViewDataItem current3 = enumerator.Current as ListViewDataItem;
                 if (current3 is ListViewDataItemGroup)
                 {
                     flag = true;
                     break;
                 }
                 if (current3 != null && this.IsItemVisible(current3))
                 {
                     IVirtualizedElement <ListViewDataItem> element = this.UpdateElement(position, current3);
                     if (element != null)
                     {
                         ++position;
                         if (!this.MeasureElement(element))
                         {
                             flag = false;
                             break;
                         }
                     }
                 }
             }while (enumerator.MoveNext() && !(enumerator.Current is ListViewDataItemGroup));
             if ((double)this.currentY != (double)this.clientRect.Top)
             {
                 this.currentY     = this.clientRect.Top;
                 this.currentX    += this.maxItemWidth;
                 this.maxItemWidth = 0.0f;
             }
             if (groupElement != null)
             {
                 this.MeasureGroupElement(groupElement);
             }
             if (enumerator.Current is ListViewDataItemGroup)
             {
                 viewDataItemGroup = enumerator.Current as ListViewDataItemGroup;
             }
             this.currentX += (float)this.owner.GroupIndent;
             if ((double)this.currentX >= (double)this.clientRect.Right)
             {
                 flag = false;
             }
         }while (flag && enumerator.MoveNext());
         if (viewDataItemGroup != null)
         {
             BaseListViewGroupVisualItem groupElement = this.UpdateElement(position, (ListViewDataItem)viewDataItemGroup) as BaseListViewGroupVisualItem;
             if (groupElement != null)
             {
                 this.MeasureGroupElement(groupElement);
                 ++position;
             }
         }
         while (position < this.Children.Count)
         {
             this.RemoveElement(position);
         }
     }
     else
     {
         base.MeasureElements();
     }
 }
Esempio n. 5
0
        protected virtual SizeF ArrangeGroupedHorizontal(SizeF finalSize)
        {
            float x      = this.clientRect.X + this.ScrollOffset.Width;
            float y      = this.clientRect.Y;
            float val1_1 = 0.0f;
            float val1_2 = 0.0f;
            int   num    = 0;
            BaseListViewGroupVisualItem viewGroupVisualItem = (BaseListViewGroupVisualItem)null;

            foreach (RadElement child in this.Children)
            {
                BaseListViewVisualItem listViewVisualItem = child as BaseListViewVisualItem;
                ++num;
                if (listViewVisualItem != null && listViewVisualItem.Data != null)
                {
                    Size size = this.ElementProvider.GetElementSize(listViewVisualItem.Data).ToSize();
                    if (child is BaseListViewGroupVisualItem)
                    {
                        if ((double)y != (double)this.clientRect.Y)
                        {
                            y      = this.clientRect.Y;
                            x     += val1_2;
                            val1_2 = 0.0f;
                        }
                        if (num == 1)
                        {
                            viewGroupVisualItem = child as BaseListViewGroupVisualItem;
                        }
                        else if (viewGroupVisualItem != null)
                        {
                            SizeF      elementSize = this.ElementProvider.GetElementSize(viewGroupVisualItem.Data);
                            RectangleF finalRect   = new RectangleF(new PointF(x - elementSize.Width, (float)this.Padding.Top), elementSize);
                            viewGroupVisualItem.Arrange(finalRect);
                            viewGroupVisualItem = (BaseListViewGroupVisualItem)null;
                        }
                        if (((BaseListViewVisualItem)child).Data != this.owner.Scroller.Traverser.Current && (this.owner.Scroller.Traverser.Current == null || this.owner.Scroller.Traverser.Current.Group != ((BaseListViewVisualItem)child).Data))
                        {
                            x += (float)this.owner.GroupIndent;
                        }
                        RectangleF rectangleF = new RectangleF(new PointF(x, (float)this.Padding.Top), (SizeF)size);
                        if (this.RightToLeft)
                        {
                            rectangleF = LayoutUtils.RTLTranslateNonRelative(rectangleF, this.clientRect);
                        }
                        child.Arrange(rectangleF);
                        if (!(child as BaseListViewGroupVisualItem).HasVisibleItems())
                        {
                            x += (float)size.Width;
                        }
                    }
                    else
                    {
                        if ((double)y + (double)size.Height > (double)this.clientRect.Bottom)
                        {
                            y      = this.clientRect.Y;
                            x     += val1_2 + (float)this.ItemSpacing;
                            val1_2 = (float)size.Width;
                        }
                        val1_1 = Math.Max(val1_1, (float)size.Height);
                        val1_2 = Math.Max(val1_2, (float)size.Width);
                        RectangleF rectangleF = new RectangleF(new PointF(x, y), (SizeF)size);
                        if (this.RightToLeft)
                        {
                            rectangleF = LayoutUtils.RTLTranslateNonRelative(rectangleF, this.clientRect);
                        }
                        child.Arrange(rectangleF);
                        y += (float)(size.Height + this.ItemSpacing);
                    }
                }
            }
            return(finalSize);
        }