示例#1
0
        public void ApplyLayout(object layout)
        {
            TreeLayout tl = layout as TreeLayout;

            if (tl != null)
            {
                tl.Arrange(flowchart);
                return;
            }

#if !FCNET_STD
            SpringLayout sl = layout as SpringLayout;
            if (sl != null)
            {
                sl.Arrange(flowchart);
                return;
            }

            LayeredLayout ll = layout as LayeredLayout;
            if (ll != null)
            {
                ll.Arrange(flowchart);
                return;
            }

            GridLayout gl = layout as GridLayout;
            if (gl != null)
            {
                gl.Arrange(flowchart);
                return;
            }
#endif
        }
示例#2
0
        public void MeasureArrange_ChildHasSizeAndHasMultiSpan_Correct(
            double containerLength, double expectedDesiredLength,
            IList expectedMeasureLengthList, IList expectedArrangeLengthList)
        {
            var length          = "100,*,2*";
            var childLengthList = new[] { 150d, 150d, 150d };
            var spans           = new[] { 1, 2, 1 };

            // Arrange
            var lengthList = new ColumnDefinitions(length);
            var layout     = new GridLayout(lengthList);

            layout.AppendMeasureConventions(
                Enumerable.Range(0, lengthList.Count).ToDictionary(x => x, x => (x, spans[x])),
                x => childLengthList[x]);

            // Measure - Action & Assert
            var measure = layout.Measure(containerLength);

            Assert.Equal(expectedDesiredLength, measure.DesiredLength);
            AssertEqual(expectedMeasureLengthList, measure.LengthList);

            // Arrange - Action & Assert
            var arrange = layout.Arrange(
                double.IsInfinity(containerLength) ? measure.DesiredLength : containerLength,
                measure);

            AssertEqual(expectedArrangeLengthList, arrange.LengthList);
        }
示例#3
0
文件: Grid.cs 项目: yaoworld/Avalonia
        /// <summary>
        /// Arranges the grid's children.
        /// </summary>
        /// <param name="finalSize">The size allocated to the control.</param>
        /// <returns>The space taken.</returns>
        protected override Size ArrangeOverride(Size finalSize)
        {
            // Situation 1/2:
            // If the grid doesn't have any column/row definitions, it behaves like a normal panel.
            // GridLayout supports this situation but we handle this separately for performance.

            if (ColumnDefinitions.Count == 0 && RowDefinitions.Count == 0)
            {
                foreach (var child in Children.OfType <Control>())
                {
                    child.Arrange(new Rect(finalSize));
                }

                return(finalSize);
            }

            // Situation 2/2:
            // If the grid defines some columns or rows.
            // Debug Tip:
            //     - GridLayout doesn't hold any state, so you can drag the debugger execution
            //       arrow back to any statements and re-run them without any side-effect.

            var(safeColumns, safeRows) = GetSafeColumnRows();
            var columnLayout = new GridLayout(ColumnDefinitions);
            var rowLayout    = new GridLayout(RowDefinitions);

            // Calculate for arrange result.
            var columnResult = columnLayout.Arrange(finalSize.Width, _columnMeasureCache);
            var rowResult    = rowLayout.Arrange(finalSize.Height, _rowMeasureCache);

            // Arrange the children.
            foreach (var child in Children.OfType <Control>())
            {
                var(column, columnSpan) = safeColumns[child];
                var(row, rowSpan)       = safeRows[child];
                var x      = Enumerable.Range(0, column).Sum(c => columnResult.LengthList[c]);
                var y      = Enumerable.Range(0, row).Sum(r => rowResult.LengthList[r]);
                var width  = Enumerable.Range(column, columnSpan).Sum(c => columnResult.LengthList[c]);
                var height = Enumerable.Range(row, rowSpan).Sum(r => rowResult.LengthList[r]);

                child.Arrange(new Rect(x, y, width, height));
            }

            // Assign the actual width.
            for (var i = 0; i < ColumnDefinitions.Count; i++)
            {
                ColumnDefinitions[i].ActualWidth = columnResult.LengthList[i];
            }

            // Assign the actual height.
            for (var i = 0; i < RowDefinitions.Count; i++)
            {
                RowDefinitions[i].ActualHeight = rowResult.LengthList[i];
            }

            // Return the render size.
            return(finalSize);
        }
示例#4
0
        private static void TestRowDefinitionsOnly(string length, double containerLength,
                                                   double expectedDesiredLength, IList expectedLengthList)
        {
            // Arrange
            var layout = new GridLayout(new RowDefinitions(length));

            // Measure - Action & Assert
            var measure = layout.Measure(containerLength);

            Assert.Equal(expectedDesiredLength, measure.DesiredLength);
            AssertEqual(expectedLengthList, measure.LengthList);

            // Arrange - Action & Assert
            var arrange = layout.Arrange(containerLength, measure);

            AssertEqual(expectedLengthList, arrange.LengthList);
        }
示例#5
0
        public void MeasureArrange_InfiniteMeasure_Correct(string length, double expectedDesiredLength,
                                                           IList expectedMeasureList, IList expectedArrangeList)
        {
            // Arrange
            var layout = new GridLayout(new RowDefinitions(length));

            // Measure - Action & Assert
            var measure = layout.Measure(Inf);

            Assert.Equal(expectedDesiredLength, measure.DesiredLength);
            AssertEqual(expectedMeasureList, measure.LengthList);

            // Arrange - Action & Assert
            var arrange = layout.Arrange(measure.DesiredLength, measure);

            AssertEqual(expectedArrangeList, arrange.LengthList);
        }
示例#6
0
        public void MeasureArrange_ChildHasSize_Correct(string length,
                                                        IList childLengthList, double containerLength,
                                                        double expectedDesiredLength, IList expectedLengthList)
        {
            // Arrange
            var lengthList = new ColumnDefinitions(length);
            var layout     = new GridLayout(lengthList);

            layout.AppendMeasureConventions(
                Enumerable.Range(0, lengthList.Count).ToDictionary(x => x, x => (x, 1)),
                x => (double)childLengthList[x]);

            // Measure - Action & Assert
            var measure = layout.Measure(containerLength);

            Assert.Equal(expectedDesiredLength, measure.DesiredLength);
            AssertEqual(expectedLengthList, measure.LengthList);

            // Arrange - Action & Assert
            var arrange = layout.Arrange(containerLength, measure);

            AssertEqual(expectedLengthList, arrange.LengthList);
        }