예제 #1
0
        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++;
            }
        }
예제 #2
0
        private bool IsExpandedElement(RadElement element)
        {
            ICollapsibleElement collapseElement = element as ICollapsibleElement;

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

            return(!(element.Visibility == ElementVisibility.Collapsed));
        }
예제 #3
0
        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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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++);
                }
            }
        }