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