using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows; using System.Windows.Documents; using GCHR.Model.Konto; namespace GCHR.Control.Printing { public class RandomTabularPaginator : DocumentPaginator { private int _rowsPerPage; private Size _pageSize; private readonly int _rows; private readonly List _konten; private readonly String _aktuellePeriode; private readonly String _altePeriode; public RandomTabularPaginator(String aktuellePeriode, String altePeriode, List konten, Size pageSize) { _aktuellePeriode = aktuellePeriode; _altePeriode = altePeriode; _konten = konten; _rows = konten.Count; PageSize = pageSize; } public override DocumentPage GetPage(int pageNumber) { var currentRow = _rowsPerPage * pageNumber; var page = new PageElement(currentRow, Math.Min(_rowsPerPage, _rows - currentRow), _konten, _aktuellePeriode, _altePeriode) { Width = PageSize.Width, Height = PageSize.Height, }; page.Measure(PageSize); page.Arrange(new Rect(new Point(0, 0), PageSize)); return new DocumentPage(page); } public override bool IsPageCountValid { get { return true; } } public override int PageCount { get { return (int)Math.Ceiling(_rows / (double)_rowsPerPage); } } public override sealed Size PageSize { get { return _pageSize; } set { _pageSize = value; _rowsPerPage = PageElement.RowsPerPage(PageSize.Height); //Can't print anything if you can't fit a row on a page Debug.Assert(_rowsPerPage > 0); } } public override IDocumentPaginatorSource Source { get { return null; } } } }