Пример #1
0
        protected CollapsibleElement GetElementToExpand(
            float sumAllElementsWidth,
            float availableWidth,
            out int possibleExpandStep)
        {
            possibleExpandStep = -1;
            CollapsibleElement         collapsibleElement1 = (CollapsibleElement)null;
            IList <CollapsibleElement> collapsibleChildren = (IList <CollapsibleElement>) this.CollapsibleChildren;
            int count = collapsibleChildren.Count;

            if (count == 0)
            {
                return((CollapsibleElement)null);
            }
            for (int nextStep = 3; nextStep >= 0; --nextStep)
            {
                for (int index = 0; index < count; ++index)
                {
                    CollapsibleElement collapsibleElement2 = collapsibleChildren[index];
                    if (collapsibleElement2.CanExpandToStep(nextStep))
                    {
                        possibleExpandStep = nextStep;
                        return(collapsibleElement2);
                    }
                }
            }
            return(collapsibleElement1);
        }
Пример #2
0
        protected CollapsibleElement GetElementToExpand(float sumAllElementsWidth, float availableWidth, out int possibleExpandStep)
        {
            possibleExpandStep = -1;
            CollapsibleElement elementToExpand = null;

            IList <CollapsibleElement> children = this.CollapsibleChildren;
            int count = children.Count;

            if (count == 0)
            {
                return(null);
            }

            for (int nextCollapseStep = (int)ChunkVisibilityState.Collapsed - 1; nextCollapseStep >= 0; nextCollapseStep--)
            {
                for (int collapsibleIndex = 0; collapsibleIndex < count; ++collapsibleIndex)
                {
                    CollapsibleElement collapsibleElement = children[collapsibleIndex];

                    if (collapsibleElement.CanExpandToStep(nextCollapseStep))
                    {
                        possibleExpandStep = nextCollapseStep;
                        return(collapsibleElement);
                    }
                }
            }

            return(elementToExpand);
        }
Пример #3
0
        protected override SizeF MeasureOverride(SizeF constraint)
        {
            if (!this.CollapsingEnabled || this.IsDesignMode || constraint == SizeF.Empty)
            {
                return(base.MeasureOverride(constraint));
            }
            ExpandableStackLayout.InvalidateAll((RadElement)this);
            SizeF allElementsSize = this.GetAllElementsSize(constraint);
            int   count           = this.Children.Count;

            if ((double)allElementsSize.Width >= (double)constraint.Width)
            {
                do
                {
                    int possibleCollapseStep;
                    CollapsibleElement elementToCollapse;
                    do
                    {
                        possibleCollapseStep = -1;
                        elementToCollapse    = this.GetElementToCollapse(out possibleCollapseStep);
                        if (elementToCollapse != null)
                        {
                            elementToCollapse.InvalidateMeasure();
                            elementToCollapse.Measure(constraint);
                            SizeF desiredSize = elementToCollapse.DesiredSize;
                            elementToCollapse.SizeBeforeCollapsing = desiredSize;
                        }
                        else
                        {
                            goto label_11;
                        }
                    }while (!elementToCollapse.CollapseElementToStep(possibleCollapseStep));
                    ExpandableStackLayout.InvalidateAll((RadElement)elementToCollapse);
                    elementToCollapse.Measure(constraint);
                    SizeF desiredSize1 = elementToCollapse.DesiredSize;
                    elementToCollapse.SizeAfterCollapsing = desiredSize1;
                    ++this.collapsedElementCount;
                }while ((double)this.GetAllElementsSize(constraint).Width > (double)constraint.Width);
            }
            else
            {
                for (int index = 0; index < count; ++index)
                {
                    int possibleExpandStep             = -1;
                    CollapsibleElement elementToExpand = this.GetElementToExpand(allElementsSize.Width, constraint.Width, out possibleExpandStep);
                    if (elementToExpand != null && ((double)allElementsSize.Width - (double)elementToExpand.DesiredSize.Width + (double)elementToExpand.SizeBeforeCollapsing.Width <= (double)constraint.Width && elementToExpand.ExpandElementToStep(possibleExpandStep)))
                    {
                        --this.collapsedElementCount;
                    }
                }
            }
label_11:
            ExpandableStackLayout.InvalidateAll((RadElement)this);
            return(this.GetAllElementsSize(constraint));
        }
Пример #4
0
        protected CollapsibleElement GetElementToCollapse(out int possibleCollapseStep)
        {
            possibleCollapseStep = -1;

            IList <CollapsibleElement> children = this.CollapsibleChildren;
            int count = children.Count;

            if (count == 0)
            {
                return(null);
            }

            int nextCollapseStep = children[count - 1].CollapseStep + 1;

            for (int i = 0; i < children.Count; ++i)
            {
                nextCollapseStep = Math.Min(children[i].CollapseStep, nextCollapseStep);
            }

            nextCollapseStep++;

            int maxCollapseStep = children[0].CollapseMaxSteps;

            for (; nextCollapseStep < maxCollapseStep; ++nextCollapseStep)
            {
                for (int collapsibleIndex = count - 1; collapsibleIndex >= 0; --collapsibleIndex)
                {
                    CollapsibleElement collapsibleElement = children[collapsibleIndex];

                    if (collapsibleElement.CanCollapseToStep(nextCollapseStep))
                    {
                        possibleCollapseStep = nextCollapseStep;
                        return(collapsibleElement);
                    }
                }
            }

            for (int collapsibleIndex = count - 1; collapsibleIndex >= 0; --collapsibleIndex)
            {
                CollapsibleElement collapsibleElement = children[collapsibleIndex];
                if (collapsibleElement.CanCollapseToStep(collapsibleElement.CollapseMaxSteps))
                {
                    possibleCollapseStep = collapsibleElement.CollapseMaxSteps;
                    return(collapsibleElement);
                }
            }

            return(null);
        }
Пример #5
0
        protected CollapsibleElement GetElementToCollapse(out int possibleCollapseStep)
        {
            possibleCollapseStep = -1;
            IList <CollapsibleElement> collapsibleChildren = (IList <CollapsibleElement>) this.CollapsibleChildren;
            int count = collapsibleChildren.Count;

            if (count == 0)
            {
                return((CollapsibleElement)null);
            }
            int val2 = collapsibleChildren[count - 1].CollapseStep + 1;

            for (int index = 0; index < collapsibleChildren.Count; ++index)
            {
                val2 = Math.Min(collapsibleChildren[index].CollapseStep, val2);
            }
            int nextStep = val2 + 1;

            for (int collapseMaxSteps = collapsibleChildren[0].CollapseMaxSteps; nextStep < collapseMaxSteps; ++nextStep)
            {
                for (int index = count - 1; index >= 0; --index)
                {
                    CollapsibleElement collapsibleElement = collapsibleChildren[index];
                    if (collapsibleElement.CanCollapseToStep(nextStep))
                    {
                        possibleCollapseStep = nextStep;
                        return(collapsibleElement);
                    }
                }
            }
            for (int index = count - 1; index >= 0; --index)
            {
                CollapsibleElement collapsibleElement = collapsibleChildren[index];
                if (collapsibleElement.CanCollapseToStep(collapsibleElement.CollapseMaxSteps))
                {
                    possibleCollapseStep = collapsibleElement.CollapseMaxSteps;
                    return(collapsibleElement);
                }
            }
            return((CollapsibleElement)null);
        }
Пример #6
0
        protected override SizeF MeasureOverride(SizeF constraint)
        {
            if (!this.CollapsingEnabled || this.IsDesignMode)
            {
                return(base.MeasureOverride(constraint));
            }

            InvalidateAll(this);
            SizeF allElementsSize = this.GetAllElementsSize(constraint);

            int count = this.Children.Count;

            if (allElementsSize.Width >= constraint.Width)
            {
                while (true)
                {
                    int possibleCollapseStep = -1;
                    CollapsibleElement collapsibleElement = this.GetElementToCollapse(out possibleCollapseStep);
                    if (collapsibleElement == null)
                    {
                        break;
                    }

                    collapsibleElement.InvalidateMeasure();
                    collapsibleElement.Measure(constraint);

                    SizeF sizeBeforeCollapsing = collapsibleElement.DesiredSize;
                    collapsibleElement.SizeBeforeCollapsing = sizeBeforeCollapsing;
                    if (collapsibleElement.CollapseElementToStep(possibleCollapseStep))
                    {
                        InvalidateAll(collapsibleElement);
                        collapsibleElement.Measure(constraint);

                        SizeF sizeAfterCollapsing = collapsibleElement.DesiredSize;

                        collapsibleElement.SizeAfterCollapsing = sizeAfterCollapsing;

                        this.collapsedElementCount++;
                        allElementsSize = this.GetAllElementsSize(constraint);
                        if (allElementsSize.Width <= constraint.Width)
                        {
                            break;
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < count; ++i)
                {
                    int possibleExpandStep = -1;
                    CollapsibleElement expandableElement = this.GetElementToExpand(allElementsSize.Width, constraint.Width, out possibleExpandStep);
                    if (expandableElement != null)
                    {
                        if (allElementsSize.Width - expandableElement.DesiredSize.Width + expandableElement.SizeBeforeCollapsing.Width <= constraint.Width)
                        {
                            if (expandableElement.ExpandElementToStep(possibleExpandStep))
                            {
                                this.collapsedElementCount--;
                            }
                        }
                    }
                }
            }

            InvalidateAll(this);
            //allElementsSize = this.GetAllElementsSize(constraint);
            return(allElementsSize);
        }