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); }
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); }
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)); }
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); }
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); }
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); }