private void CollapseElements(List <PreferredSizeData> list, Size availableSize, int nextLeftSaved, int rowElements) { int nextLeft = nextLeftSaved; int firstExpandedIndex = -1; for (int i = list.Count - rowElements - 1; i >= 0; i--) { PreferredSizeData data = list[i]; int step = GetDataSize(data, false).Width + data.Element.Margin.Horizontal; if ((firstExpandedIndex == -1) && IsExpandedElement(data.Element)) { firstExpandedIndex = i; nextLeftSaved = nextLeft + step; } if (nextLeft + step > availableSize.Width) { if (firstExpandedIndex != -1) { ICollapsibleElement lastExpandedElement = (ICollapsibleElement)list[firstExpandedIndex].Element; lastExpandedElement.ExpandedSize = list[firstExpandedIndex].PreferredSize; lastExpandedElement.CollapseElement(list[firstExpandedIndex].PreferredSize); } CollapseElements(list, availableSize, nextLeftSaved, list.Count - firstExpandedIndex - 1); return; } nextLeft += step; rowElements++; } }
private bool IsExpandedElement(RadElement element) { ICollapsibleElement collapseElement = element as ICollapsibleElement; if (collapseElement == null) { return(false); } return(!(element.Visibility == ElementVisibility.Collapsed)); }
protected PreferredSizeData GetElementToExpand(List <PreferredSizeData> list, int sumWidth, int availableWidth) { PreferredSizeData elementToExpand = null; for (int i = 2; ; i++) { PreferredSizeData lastElementToExpand = null; bool advanceToNextPriority = false; int maxSumWidth = 0; foreach (PreferredSizeData data in list) { ICollapsibleElement collapsibleElement = data.Element as ICollapsibleElement; if (collapsibleElement == null) { continue; } if (i < collapsibleElement.CollapseMaxSteps) { advanceToNextPriority = true; } if (collapsibleElement.CollapseStep != i) { continue; } //if (data.Element.Size.Width == collapsibleElement.ExpandedSize.Width) // continue; int newSumWidth = sumWidth - data.Element.Size.Width + collapsibleElement.ExpandedSize.Width; if ((newSumWidth < availableWidth) && (newSumWidth > maxSumWidth)) { lastElementToExpand = data; maxSumWidth = newSumWidth; } } if (lastElementToExpand != null) { elementToExpand = lastElementToExpand; } if (!advanceToNextPriority) { break; } } return(elementToExpand); }
protected bool ShouldExpandElements(List <PreferredSizeData> list, Size availableSize) { int sumWidth = 0; bool containsCollapsedElements = false; foreach (PreferredSizeData data in list) { sumWidth += GetDataSize(data, false).Width + data.Element.Margin.Horizontal; ICollapsibleElement collapsibleElement = data.Element as ICollapsibleElement; if ((collapsibleElement != null) && (collapsibleElement.CollapseStep > 1)) { containsCollapsedElements = true; } } return(containsCollapsedElements && (sumWidth < availableSize.Width)); }
protected PreferredSizeData GetElementToCollapse(List <PreferredSizeData> list) { for (int i = 1; ; i++) { PreferredSizeData lastElementToCollapse = null; bool advanceToNextPriority = false; foreach (PreferredSizeData data in list) { ICollapsibleElement collapsibleElement = data.Element as ICollapsibleElement; if (collapsibleElement == null) { continue; } if ((collapsibleElement.CollapseStep == i) && (collapsibleElement.CollapseStep < collapsibleElement.CollapseMaxSteps)) { lastElementToCollapse = data; } if (i < collapsibleElement.CollapseMaxSteps) { advanceToNextPriority = true; } } if (lastElementToCollapse != null) { return(lastElementToCollapse); } if (!advanceToNextPriority) { break; } } return(null); }
protected bool ShouldCollapseElements(List <PreferredSizeData> list, Size availableSize) { int sumWidth = 0; bool containsExpandedElements = false; bool shouldCollapseElements = false; //Woraraound: the first time ribon appears available Size is calculated incorrectly - no need to collapse if (availableSize.Width == 0 || availableSize.Height == 0) { return(false); } foreach (PreferredSizeData data in list) { sumWidth += GetDataSize(data, false).Width + data.Element.Margin.Horizontal; if (sumWidth > availableSize.Width) { shouldCollapseElements = true; } ICollapsibleElement collapsibleElement = data.Element as ICollapsibleElement; if ((collapsibleElement != null) && (collapsibleElement.CollapseStep < collapsibleElement.CollapseMaxSteps)) { containsExpandedElements = true; } if (shouldCollapseElements && containsExpandedElements) { return(true); } } return(false); }
private void ExpandElements(List <PreferredSizeData> list, Size availableSize, int nextLeftSaved, int rowElements) { int nextLeft = nextLeftSaved; int firstCollapsedIndex = -1; for (int i = rowElements; i < list.Count; i++) { PreferredSizeData data = list[i]; int step = GetDataSize(data, false).Width + data.Element.Margin.Horizontal; if ((firstCollapsedIndex == -1) && IsCollapsedElement(data.Element)) { firstCollapsedIndex = i; nextLeftSaved = nextLeft + step; } if (nextLeft + step > availableSize.Width) { return; } nextLeft += step; } if (firstCollapsedIndex != -1) { ICollapsibleElement firstCollapsedElement = (ICollapsibleElement)list[firstCollapsedIndex].Element; if ((firstCollapsedElement.ExpandedSize != Size.Empty) && (nextLeft - firstCollapsedElement.ExpandedSize.Width + firstCollapsedElement.ExpandedSize.Width <= availableSize.Width)) { firstCollapsedElement.ExpandElement(); ExpandElements(list, availableSize, nextLeftSaved, firstCollapsedIndex++); } } }