protected override SizeF ArrangeOverride(SizeF finalSize)
        {
            InitializeOffset();

            foreach (RadElement element in this.Children)
            {
                if (this.orientation == Orientation.Vertical)
                {
                    IVirtualizedElement <T> virtualizedElement = (IVirtualizedElement <T>)element;
                    float      width       = FitElementsToSize /*|| element.StretchHorizontally*/ ? finalSize.Width : element.DesiredSize.Width;
                    float      height      = ElementProvider.GetElementSize(virtualizedElement.Data).Height;
                    RectangleF arrangeRect = new RectangleF(ScrollOffset.Width, offset, width, height);
                    if (RightToLeft)
                    {
                        arrangeRect.X = finalSize.Width - width;
                    }
                    arrangeRect = ArrangeElementCore(element, finalSize, arrangeRect);
                    offset     += arrangeRect.Height + ItemSpacing;
                }
                else
                {
                    float      height      = FitElementsToSize || element.StretchVertically ? finalSize.Height : element.DesiredSize.Height;
                    RectangleF arrangeRect = ArrangeElementCore(element, finalSize, new RectangleF(offset, 0, element.DesiredSize.Width, height));
                    offset += arrangeRect.Width + ItemSpacing;
                }
            }

            return(finalSize);
        }
예제 #2
0
 public override bool ShouldUpdate(
     IVirtualizedElement <RadListDataItem> element,
     RadListDataItem data,
     object context)
 {
     return(base.ShouldUpdate(element, data, context));
 }
        protected override bool MeasureElement(IVirtualizedElement <T> element)
        {
            RadElement radElement = element as RadElement;

            if (radElement == null)
            {
                return(false);
            }

            SizeF elementDesiredSize = MeasureElementCore(radElement, availableSize);
            bool  continueMeasure    = true;

            if (this.orientation == Orientation.Vertical)
            {
                continueMeasure = availableSize.Height > elementDesiredSize.Height;
                float height = elementDesiredSize.Height + ItemSpacing;
                availableSize.Height -= height;
                desiredSize.Height   += height;
                desiredSize.Width     = Math.Max(desiredSize.Width, elementDesiredSize.Width);
                return(continueMeasure);
            }

            continueMeasure = availableSize.Width > elementDesiredSize.Width;
            float width = elementDesiredSize.Width + ItemSpacing;

            availableSize.Width -= width;
            desiredSize.Width   += width;
            desiredSize.Height   = Math.Max(desiredSize.Height, elementDesiredSize.Height);
            return(continueMeasure);
        }
        protected virtual SizeF MeasureElementCore(RadElement element, SizeF availableSize)
        {
            IVirtualizedElement <T> virtualizedElement = (IVirtualizedElement <T>)element;
            SizeF fixedSize = ElementProvider.GetElementSize(virtualizedElement.Data);

            if (Orientation == System.Windows.Forms.Orientation.Vertical)
            {
                if (fixedSize.Height > 0)
                {
                    availableSize.Height = fixedSize.Height;
                }
                if (!FitElementsToSize)
                {
                    availableSize.Width = float.PositiveInfinity;
                }
            }
            else
            {
                availableSize.Width = fixedSize.Width;
                if (!FitElementsToSize)
                {
                    availableSize.Height = float.PositiveInfinity;
                }
            }

            element.Measure(availableSize);

            return(element.DesiredSize);
        }
예제 #5
0
 public override bool IsCompatible(
     IVirtualizedElement <RadTreeNode> element,
     RadTreeNode data,
     object context)
 {
     return(base.IsCompatible(element, data, context));
 }
예제 #6
0
        protected virtual void MeasureElements()
        {
            int position = 0;

            foreach (T data in DataProvider)
            {
                if (!IsItemVisible(data))
                {
                    continue;
                }
                IVirtualizedElement <T> element = UpdateElement(position, data);
                if (element == null)
                {
                    continue;
                }
                position++;
                if (!MeasureElement(element))
                {
                    break;
                }
            }
            while (position < this.Children.Count)
            {
                RemoveElement(position);
            }
        }
예제 #7
0
        protected override bool BeginMeasure(System.Drawing.SizeF availableSize)
        {
            this.SuspendThemeRefresh();

            foreach (ListViewDataItem data in DataProvider)
            {
                if (data.IsMeasureValid)
                {
                    continue;
                }

                IVirtualizedElement <ListViewDataItem> element = UpdateElement(data is ListViewDataItemGroup ? 1 : 0, data);
                RadElement radElement = element as RadElement;
                if (radElement != null)
                {
                    radElement.InvalidateMeasure();
                    radElement.Measure(availableSize);
                }
            }

            this.owner.Owner.IsItemsMeasureValid = true;
            this.ResumeThemeRefresh();
            owner.Scroller.UpdateScrollRange();

            return(base.BeginMeasure(availableSize));
        }
 protected override SizeF ArrangeOverride(SizeF finalSize)
 {
     this.InitializeOffset();
     foreach (RadElement child in this.Children)
     {
         if (this.orientation == Orientation.Vertical)
         {
             IVirtualizedElement <T> virtualizedElement = (IVirtualizedElement <T>)child;
             float      width       = this.FitElementsToSize ? finalSize.Width : child.DesiredSize.Width;
             float      height      = this.ElementProvider.GetElementSize(virtualizedElement.Data).Height;
             RectangleF arrangeRect = new RectangleF(this.ScrollOffset.Width, this.offset, width, height);
             if (this.RightToLeft)
             {
                 arrangeRect.X = finalSize.Width - width;
             }
             arrangeRect  = this.ArrangeElementCore(child, finalSize, arrangeRect);
             this.offset += arrangeRect.Height + (float)this.ItemSpacing;
         }
         else
         {
             float height = this.FitElementsToSize || child.StretchVertically ? finalSize.Height : child.DesiredSize.Height;
             this.offset += this.ArrangeElementCore(child, finalSize, new RectangleF(this.offset, 0.0f, child.DesiredSize.Width, height)).Width + (float)this.ItemSpacing;
         }
     }
     return(finalSize);
 }
        protected override bool MeasureElement(IVirtualizedElement <T> element)
        {
            RadElement element1 = element as RadElement;

            if (element1 == null)
            {
                return(false);
            }
            SizeF sizeF = this.MeasureElementCore(element1, this.availableSize);

            if (this.orientation == Orientation.Vertical)
            {
                bool  flag = (double)this.availableSize.Height > (double)sizeF.Height;
                float num  = sizeF.Height + (float)this.ItemSpacing;
                this.availableSize.Height -= num;
                this.desiredSize.Height   += num;
                this.desiredSize.Width     = Math.Max(this.desiredSize.Width, sizeF.Width);
                return(flag);
            }
            bool  flag1 = (double)this.availableSize.Width > 0.0;
            float num1  = sizeF.Width + (float)this.ItemSpacing;

            this.availableSize.Width -= num1;
            this.desiredSize.Width   += num1;
            this.desiredSize.Height   = Math.Max(this.desiredSize.Height, sizeF.Height);
            return(flag1);
        }
예제 #10
0
        public IVirtualizedElement <int> GetElement(int data, object context)
        {
            bool flag = this.owner.IsRowExpanded(data);
            IVirtualizedElement <int> virtualizedElement = (IVirtualizedElement <int>)null;

            for (int index = this.cachedRows.Count - 1; index >= 0; --index)
            {
                if ((!flag && !this.cachedRows[index].IsChildViewInitialized || flag && this.cachedRows[index].IsChildViewInitialized) && this.cachedRows[index].IsCompatible(data, context))
                {
                    virtualizedElement = (IVirtualizedElement <int>) this.cachedRows[index];
                    this.cachedRows.RemoveAt(index);
                    break;
                }
            }
            if (virtualizedElement == null && this.cachedRows.Count > 10)
            {
                for (int index = this.cachedRows.Count - 1; index >= 0; --index)
                {
                    if (this.cachedRows[index].IsCompatible(data, context))
                    {
                        virtualizedElement = (IVirtualizedElement <int>) this.cachedRows[index];
                        this.cachedRows.RemoveAt(index);
                        break;
                    }
                }
            }
            if (virtualizedElement == null)
            {
                VirtualGridRowElement element;
                switch (data)
                {
                case -3:
                    element = this.CreateElement(data, typeof(VirtualGridFilterRowElement), context);
                    element.Initialize(this.owner);
                    element.Attach(-3, context);
                    break;

                case -2:
                    element = this.CreateElement(data, typeof(VirtualGridNewRowElement), context);
                    element.Initialize(this.owner);
                    element.Attach(-2, context);
                    break;

                case -1:
                    element = this.CreateElement(data, typeof(VirtualGridHeaderRowElement), context);
                    element.Initialize(this.owner);
                    element.Attach(-1, context);
                    break;

                default:
                    element = this.CreateElement(data, typeof(VirtualGridRowElement), context);
                    element.Initialize(this.owner);
                    break;
                }
                return((IVirtualizedElement <int>)element);
            }
            virtualizedElement.Attach(data, context);
            return(virtualizedElement);
        }
 public virtual bool ShouldUpdate(IVirtualizedElement <T> element, T data, object context)
 {
     if (element.Data.Equals((object)data))
     {
         return(!this.IsCompatible(element, data, context));
     }
     return(true);
 }
예제 #12
0
        protected override bool MeasureElement(IVirtualizedElement <ListViewDataItem> element)
        {
            bool result = base.MeasureElement(element);

            maxDesiredWidth = Math.Max(maxDesiredWidth, element.Data.ActualSize.Width);

            return(result);
        }
예제 #13
0
 protected override bool MeasureElement(IVirtualizedElement <GridViewRowInfo> element)
 {
     if (element == null)
     {
         return(false);
     }
     base.MeasureElement(element);
     return(true);
 }
        protected override IVirtualizedElement <GridViewRowInfo> UpdateElement(
            int position,
            GridViewRowInfo data)
        {
            IVirtualizedElement <GridViewRowInfo> virtualizedElement = this.updateAction != ScrollableRowsUpdateAction.ScrollUp ? base.UpdateElement(position, data) : this.UpdateElementOnScrollUp(position, data);

            this.updateAction = ScrollableRowsUpdateAction.None;
            return(virtualizedElement);
        }
예제 #15
0
        protected override bool MeasureElement(IVirtualizedElement <ListViewDataItem> element)
        {
            bool flag = base.MeasureElement(element);

            this.maxDesiredWidth           = Math.Max(this.maxDesiredWidth, element.Data.ActualSize.Width);
            this.cachedDesiredSize.Height += (float)element.Data.ActualSize.Height;
            this.cachedDesiredSize.Width   = Math.Max(this.cachedDesiredSize.Width, (float)element.Data.ActualSize.Width);
            return(flag);
        }
예제 #16
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);
        }
예제 #17
0
        protected virtual void RemoveElement(int position)
        {
            IVirtualizedElement <T> virtualizedElement = (IVirtualizedElement <T>) this.Children[position];

            ElementProvider.CacheElement(virtualizedElement);
            this.BitState[InvalidateMeasureOnRemoveStateKey] = false;
            this.Children.RemoveAt(position);
            this.BitState[InvalidateMeasureOnRemoveStateKey] = true;
            virtualizedElement.Detach();
        }
예제 #18
0
        public virtual IVirtualizedElement <T> GetElement(T data, object context)
        {
            IVirtualizedElement <T> element = GetElementFromCache(data, context);

            if (element != null)
            {
                return(element);
            }
            return(this.CreateElement(data, context));
        }
        protected virtual void RemoveElement(int position)
        {
            IVirtualizedElement <T> child = (IVirtualizedElement <T>) this.Children[position];

            this.ElementProvider.CacheElement(child);
            this.InvalidateMeasureOnRemove = false;
            this.Children.RemoveAt(position);
            this.InvalidateMeasureOnRemove = true;
            child.Detach();
        }
예제 #20
0
        protected override IVirtualizedElement <ListViewDataItem> UpdateElement(int position, ListViewDataItem data)
        {
            IVirtualizedElement <ListViewDataItem> element = null;
            object elementContext = this.GetElementContext();

            if (position < this.Children.Count)
            {
                element = (IVirtualizedElement <ListViewDataItem>) this.Children[position];
                if (ElementProvider.ShouldUpdate(element, data, elementContext))
                {
                    if (position < this.Children.Count - 1)
                    {
                        IVirtualizedElement <ListViewDataItem> nextElement = (IVirtualizedElement <ListViewDataItem>) this.Children[position + 1];

                        if (nextElement.Data.Equals(data))
                        {
                            this.Children.Move(position + 1, position);
                            nextElement.Synchronize();
                            return(nextElement);
                        }
                    }

                    if (ElementProvider.IsCompatible(element, data, elementContext))
                    {
                        element.Detach();
                        element.Attach(data, elementContext);
                    }
                    else
                    {
                        int index = FindCompatibleElement(position, data);
                        if (index > position)
                        {
                            this.Children.Move(index, position);
                            element = (IVirtualizedElement <ListViewDataItem>) this.Children[position];
                            element.Detach();
                            element.Attach(data, elementContext);
                        }
                        else
                        {
                            position = Math.Min(position, this.Children.Count);
                            element  = ElementProvider.GetElement(data, elementContext);
                            InsertElement(position, element, data);
                        }
                    }
                }
            }
            else
            {
                position = Math.Min(position, this.Children.Count);
                element  = ElementProvider.GetElement(data, elementContext);
                InsertElement(position, element, data);
            }

            return(element);
        }
예제 #21
0
        public bool CacheElement(IVirtualizedElement <int> element)
        {
            VirtualGridRowElement virtualGridRowElement = element as VirtualGridRowElement;

            if (virtualGridRowElement == null || virtualGridRowElement.IsDisposed || (virtualGridRowElement.IsDisposing || this.cachedRows.Contains(virtualGridRowElement)))
            {
                return(false);
            }
            this.cachedRows.Add(virtualGridRowElement);
            return(true);
        }
예제 #22
0
 public override bool IsCompatible(
     IVirtualizedElement <GridViewRowInfo> element,
     GridViewRowInfo data,
     object context)
 {
     if (element != null && element.Data != null && (element.Data.IsCurrent && this.rowView.GridViewElement.IsInEditMode))
     {
         return(element.Data == data);
     }
     return(base.IsCompatible(element, data, context));
 }
 public override bool ShouldUpdate(
     IVirtualizedElement <GanttViewDataItem> element,
     GanttViewDataItem data,
     object context)
 {
     if (element is GanttViewSummaryItemElement && data.Items.Count == 0 || element is GanttViewMilestoneItemElement && data.Start != data.End || element is GanttViewTaskItemElement && (data.Items.Count > 0 || data.Start == data.End))
     {
         return(true);
     }
     return(base.ShouldUpdate(element, data, context));
 }
예제 #24
0
 protected virtual void InsertElement(int position, IVirtualizedElement <T> element, T data)
 {
     if (element != null)
     {
         ((RadElement)element).Visibility        = ElementVisibility.Visible;
         this.Children.checkForAlreadyAddedItems = false;
         this.Children.Insert(position, (RadElement)element);
         this.Children.checkForAlreadyAddedItems = true;
         element.Attach(data, GetElementContext());
     }
 }
예제 #25
0
        protected override IVirtualizedElement <RadListDataItem> UpdateElement(
            int position,
            RadListDataItem data)
        {
            object elementContext = this.GetElementContext();
            IVirtualizedElement <RadListDataItem> element;

            if (position < this.Children.Count)
            {
                element = (IVirtualizedElement <RadListDataItem>) this.Children[position];
                if (this.ElementProvider.ShouldUpdate(element, data, elementContext))
                {
                    if (position < this.Children.Count - 1)
                    {
                        IVirtualizedElement <RadListDataItem> child = (IVirtualizedElement <RadListDataItem>) this.Children[position + 1];
                        if (child.Data.Equals((object)data))
                        {
                            this.Children.Move(position + 1, position);
                            child.Synchronize();
                            return(child);
                        }
                    }
                    if (this.ElementProvider.IsCompatible(element, data, elementContext))
                    {
                        element.Detach();
                        element.Attach(data, elementContext);
                    }
                    else
                    {
                        int compatibleElement = this.FindCompatibleElement(position, data);
                        if (compatibleElement > position)
                        {
                            this.Children.Move(compatibleElement, position);
                            element = (IVirtualizedElement <RadListDataItem>) this.Children[position];
                            element.Detach();
                            element.Attach(data, elementContext);
                        }
                        else
                        {
                            position = Math.Min(position, this.Children.Count);
                            element  = this.ElementProvider.GetElement(data, elementContext);
                            this.InsertElement(position, element, data);
                        }
                    }
                }
            }
            else
            {
                position = Math.Min(position, this.Children.Count);
                element  = this.ElementProvider.GetElement(data, elementContext);
                this.InsertElement(position, element, data);
            }
            return(element);
        }
예제 #26
0
 public Element GetElement(Item item)
 {
     foreach (RadElement child in this.ViewElement.Children)
     {
         IVirtualizedElement <Item> virtualizedElement = child as IVirtualizedElement <Item>;
         if (virtualizedElement != null && (object)virtualizedElement.Data == (object)item)
         {
             return((Element)virtualizedElement);
         }
     }
     return(default(Element));
 }
예제 #27
0
        /// <summary>
        /// Gets the <see cref="Element"/> with the specified item.
        /// </summary>
        /// <value></value>
        public Element GetElement(Item item)
        {
            foreach (RadElement element in this.ViewElement.Children)
            {
                IVirtualizedElement <Item> virtualElement = element as IVirtualizedElement <Item>;
                if (virtualElement != null && virtualElement.Data == item)
                {
                    return((Element)virtualElement);
                }
            }

            return(default(Element));
        }
예제 #28
0
        public override bool IsCompatible(
            IVirtualizedElement <GridViewColumn> element,
            GridViewColumn data,
            object context)
        {
            Type cellType = ((GridRowElement)context).GetCellType(data);
            Type type     = element.GetType();

            if ((object)cellType != null && cellType.IsAssignableFrom(type))
            {
                return(element.IsCompatible(data, context));
            }
            return(false);
        }
예제 #29
0
        public override bool CacheElement(IVirtualizedElement <GridViewColumn> element)
        {
            GridCellElement gridCellElement = element as GridCellElement;

            if (gridCellElement.RowInfo != null)
            {
                this.cachedElements.Add(new CellElementProvider.CellElementInfo(element, gridCellElement.RowInfo.GetType()));
            }
            else
            {
                (element as IDisposable)?.Dispose();
            }
            return(true);
        }
예제 #30
0
        protected override bool MeasureElement(
            IVirtualizedElement <GanttViewTimelineDataItem> element)
        {
            GanttViewTimelineItemElement timelineItemElement = element as GanttViewTimelineItemElement;

            if (timelineItemElement == null)
            {
                return(false);
            }
            SizeF sizeF = this.MeasureElementCore((RadElement)timelineItemElement, this.availableSize);

            this.desiredSize.Height = Math.Max(this.desiredSize.Height, sizeF.Height);
            this.desiredSize.Width += sizeF.Width;
            return((double)this.desiredSize.Width - (double)this.Owner.TimelineScroller.Scrollbar.Value < (double)this.availableSize.Width);
        }