示例#1
0
        /// <summary>
        /// Gets row definition for the specified view.
        /// </summary>
        private RowDefinition GetRowDefinition(UIView child)
        {
            var cellIndex     = Cell.GetValue(child);
            int rowIndex      = cellIndex.Row < Rows.Count ? cellIndex.Row : Rows.Count - 1;
            var rowDefinition = Rows[rowIndex];

            var cellSpan = CellSpan.GetValue(child);

            if (cellSpan == null || cellSpan.Row <= 1)
            {
                return(rowDefinition);
            }

            var rowSpacing = RowSpacing ?? (Spacing ?? ElementSize.Default);

            // calculate new row definition based on row span
            var spannedRowDefinition = new RowDefinition(rowDefinition);

            for (int i = 1; i < cellSpan.Row; ++i)
            {
                int nextRowIndex = rowIndex + i;
                if (nextRowIndex >= Rows.Count)
                {
                    break;
                }

                var nextRowDefinition = Rows[nextRowIndex];

                // add actual width and spacing of next row
                spannedRowDefinition.ActualHeight += nextRowDefinition.ActualHeight + rowSpacing;
            }
            return(spannedRowDefinition);
        }
示例#2
0
        /// <summary>
        /// Gets column definition for the specified view.
        /// </summary>
        private ColumnDefinition GetColumnDefinition(UIView child)
        {
            var cellIndex        = Cell.GetValue(child);
            int columnIndex      = cellIndex.Column < Columns.Count ? cellIndex.Column : Columns.Count - 1;
            var columnDefinition = Columns[columnIndex];

            var cellSpan = CellSpan.GetValue(child);

            if (cellSpan == null || cellSpan.Column <= 1)
            {
                return(columnDefinition);
            }

            var columnSpacing = ColumnSpacing ?? (Spacing ?? ElementSize.Default);

            // calculate new column definition based on column span
            var spannedColumnDefinition = new ColumnDefinition(columnDefinition);

            for (int i = 1; i < cellSpan.Column; ++i)
            {
                int nextColumnIndex = columnIndex + i;
                if (nextColumnIndex >= Columns.Count)
                {
                    break;
                }

                var nextColumnDefinition = Columns[nextColumnIndex];

                // add actual width and spacing of next column
                spannedColumnDefinition.ActualWidth += nextColumnDefinition.ActualWidth + columnSpacing;
            }
            return(spannedColumnDefinition);
        }
示例#3
0
        private static IList <int> FindOpenerMoves(Board board)
        {
            var dimensions = board.Dimensions;

            // The middle of a board is of highest priority.
            // account for a multi cell middle, e.g. width = 4, height = 3 => middle is at (1,1) and (2,1)
            var middleSpan = new CellSpan(1 - dimensions.Width % 2, 1 - dimensions.Height % 2);

            var step = new CellSpan(1, 1);

            for (
                CellCoordinates topLeft = new CellCoordinates(dimensions.Width / 2, dimensions.Height / 2),
                bottomRight = topLeft + middleSpan;
                CellCoordinates.IsInside(topLeft, dimensions) &&
                CellCoordinates.IsInside(bottomRight, dimensions);
                topLeft -= step,
                bottomRight += step)
            {
                var cells = Cells.TakeAnyFreeCellInRect(
                    board,
                    CellCoordinates.ToCellAt(topLeft, dimensions),
                    CellCoordinates.ToCellAt(bottomRight, dimensions));

                // If cells are already occupied, take a cell from the rectangle around the current one,
                if (cells.Length > 0)
                {
                    return(cells);
                }
                // repeat until a free cell is found.
            }

            return(Array.Empty <int>());
        }
示例#4
0
 /// <summary>
 /// Table Cell
 /// </summary>
 /// <param name="boundingBox"></param>
 /// <param name="content"></param>
 /// <param name="index"></param>
 /// <param name="rowSpan"></param>
 /// <param name="columnSpan"></param>
 public TableCell(PdfRectangle boundingBox, TextBlock content, int index, CellSpan rowSpan, CellSpan columnSpan)
 {
     BoundingBox = boundingBox;
     Children    = new[] { content };
     Index       = index;
     RowSpan     = rowSpan;
     ColumnSpan  = columnSpan;
 }
示例#5
0
        /// <summary>
        ///     获取cell的CellSpan信息
        /// </summary>
        /// <param name="cell">单元格</param>
        /// <returns></returns>
        public static CellSpan GetSpan(this ICell cell)
        {
            var cellSpan = new CellSpan(1, 1);

            if (cell.IsMergedCell)
            {
                int regionsNum = cell.Sheet.NumMergedRegions;
                for (int i = 0; i < regionsNum; i++)
                {
                    CellRangeAddress range = cell.Sheet.GetMergedRegion(i);
                    if (range.FirstRow == cell.RowIndex && range.FirstColumn == cell.ColumnIndex)
                    {
                        cellSpan.RowSpan = range.LastRow - range.FirstRow + 1;
                        cellSpan.ColSpan = range.LastColumn - range.FirstColumn + 1;
                        break;
                    }
                }
            }
            return(cellSpan);
        }
示例#6
0
 /// <summary>
 /// Contains
 /// </summary>
 /// <param name="cellSpan"></param>
 /// <returns></returns>
 public bool Contains(CellSpan cellSpan)
 {
     return(this.End >= cellSpan.End && this.Start <= cellSpan.Start);
 }