Output.Printers.OnePerMeter : Table class added, common items use Table class for printing, ver. 2.18.844

This commit is contained in:
Milan Hanajik
2018-03-16 03:11:18 +01:00
parent f8a358c21e
commit 0adec1cb51
11 changed files with 282 additions and 322 deletions
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2017 Sensus Metering Systems
/// Copyright (c) 2017-2018 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@@ -161,131 +161,70 @@ namespace Results.Output.Printers.OnePerMeter
catch (Exception) { } /// Cope with situations when file is missing or is not correct
}
titleHeight = System.Windows.Forms.TextRenderer.MeasureText(header, titleFont).Height;
commonTop = TitleY + titleHeight + spacingOne4Header;
commonHeight = commonItems.Count * spacingOne;
bodyTop = commonTop + commonHeight + spacingOne4Header;
///
/// Title
///
RectangleF printArea = new RectangleF(TitleX, TitleY, printWidth, titleHeight);
e.Graphics.DrawString(header, titleFont, Brushes.Black, printArea);
titleHeight = System.Windows.Forms.TextRenderer.MeasureText(header, titleFont).Height;
commonTop = TitleY + titleHeight + spacingOne4Header;
///
/// Common items
///
string[] leftColumn = new string[commonItems.Count];
string[] rightColumn = new string[commonItems.Count];
int cnt = 0;
Table table = new Table(2);
table.Style = new TableStyle { Font = font, MarginX = 5, MarginY = 3 };
Alignment[] horizAlgn = new Alignment[] { Alignment.Left, Alignment.Left };
VertAlignment[] vertAlgn = new VertAlignment[] { VertAlignment.Top, VertAlignment.Top };
///
foreach (var v in commonItems)
{
leftColumn[cnt] = v.Caption;
rightColumn[cnt] = (batch.WaterMeters.Count > 0) ? v.Print(batch.WaterMeters[0]) : string.Empty;
cnt++;
string[] row = new string[] { v.Caption, (batch.WaterMeters.Count > 0) ? v.Print(batch.WaterMeters[0]) : string.Empty };
table.AddRow(row, horizAlgn, vertAlgn);
}
/// Determine left column width
float maxWidth = 0;
foreach (var str in leftColumn)
{
float width = e.Graphics.MeasureString(str, font).Width;
if (width > maxWidth) maxWidth = width;
}
/// Write aligned columns
for (int i = 0; i < Math.Min(leftColumn.Length, rightColumn.Length); i++)
{
PrintAt(e, leftColumn[i], font, leftMargin, commonTop + spacingOne * i, maxWidth, 0, Alignment.Left, VertAlignment.Top);
PrintAt(e, rightColumn[i], font, leftMargin + maxWidth + GapBetweenCommonColumns, commonTop + spacingOne * i, 0, 0, Alignment.Left, VertAlignment.Top);
}
}
///
/// Body
///
IList<string[]> tableRows;
IList<Alignment[]> horizAlignment;
IList<VertAlignment[]> vertAlignment;
if (pageNr == 1)
bodyTop = table.Draw(e, (float)leftMargin, commonTop) + spacingOne4Header;
}
///
/// Draw table
///
if (cfg.TestsAreRows)
{
///
/// Prepare table content: tableHeader + tableRows + itemAlignment
///
if (cfg.TestsAreRows)
TableStyle style = new TableStyle
{
GetContentTestsAreRows(wm, testItems, out tableRows, out horizAlignment, out vertAlignment);
DrawTable(e, (float)leftMargin, bodyTop, tableRows, horizAlignment, vertAlignment,
new TableStyle
{
Font = font,
HeaderFont = headerFont,
MarginX = 5,
MarginY = 3,
LineWidth = 1,
TopHeadersCount = 1,
HorizLines = TableLines.All,
VertLines = TableLines.All
});
}
else
{
GetContentTestsAreColumns(wm, testItems, out tableRows, out horizAlignment, out vertAlignment);
DrawTable(e, (float)leftMargin, bodyTop, tableRows, horizAlignment, vertAlignment,
new TableStyle
{
Font = font,
HeaderFont = headerFont,
MarginX = 5,
MarginY = 3,
LineWidth = 1,
LeftHeadersCount = 1,
HorizLines = TableLines.All,
VertLines = TableLines.All
});
}
Font = font,
HeaderFont = headerFont,
MarginX = 5,
MarginY = 3,
LineWidth = 1,
TopHeadersCount = 1,
HorizLines = TableLines.All,
VertLines = TableLines.FirstSecondAndLast
};
GetTable_TestsAreRows(wm, (pageNr == 1) ? testItems : testItems2, style).Draw(e, (float)leftMargin, bodyTop);
}
else
{
///
/// Prepare table content: tableHeader + tableRows + itemAlignment
///
if (cfg.TestsAreRows2)
TableStyle style = new TableStyle
{
GetContentTestsAreRows(wm, testItems2, out tableRows, out horizAlignment, out vertAlignment);
DrawTable(e, (float)leftMargin, bodyTop, tableRows, horizAlignment, vertAlignment,
new TableStyle
{
Font = font,
HeaderFont = headerFont,
MarginX = 5,
MarginY = 3,
LineWidth = 1,
TopHeadersCount = 1,
HorizLines = TableLines.All,
VertLines = TableLines.All
});
}
else
{
GetContentTestsAreColumns(wm, testItems2, out tableRows, out horizAlignment, out vertAlignment);
DrawTable(e, (float)leftMargin, bodyTop, tableRows, horizAlignment, vertAlignment,
new TableStyle
{
Font = font,
HeaderFont = headerFont,
MarginX = 5,
MarginY = 3,
LineWidth = 1,
LeftHeadersCount = 1,
HorizLines = TableLines.All,
VertLines = TableLines.All
});
}
Font = font,
HeaderFont = headerFont,
MarginX = 5,
MarginY = 3,
LineWidth = 1,
LeftHeadersCount = 1,
HorizLines = TableLines.FirstSecondAndLast,
VertLines = TableLines.All
};
GetTable_TestsAreColumns(wm, (pageNr == 1) ? testItems : testItems2, style).Draw(e, (float)leftMargin, bodyTop);
}
if (pageNr == nrPages)
{
///
@@ -308,41 +247,34 @@ namespace Results.Output.Printers.OnePerMeter
}
void GetContentTestsAreRows(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items,
out IList<string[]> tableRows, out IList<Alignment[]> horizAlignments, out IList<VertAlignment[]> vertAlignments)
Table GetTable_TestsAreRows(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style)
{
/// Top row contains column captions
int tableColumnsCount = items.Count;
Table table = new Table(items.Count);
table.Style = style;
tableRows = new List<string[]>();
horizAlignments = new List<Alignment[]>();
vertAlignments = new List<VertAlignment[]>();
string[] tableHeader = new string[tableColumnsCount];
Alignment[] horizAlignment = new Alignment[tableColumnsCount];
VertAlignment[] vertAlignment = new VertAlignment[tableColumnsCount];
for (int i = 0; i < tableColumnsCount; i++)
string[] tableHeader = new string[table.ColumnsCount];
Alignment[] horizAlignment = new Alignment[table.ColumnsCount];
VertAlignment[] vertAlignment = new VertAlignment[table.ColumnsCount];
for (int i = 0; i < table.ColumnsCount; i++)
{
tableHeader[i] = items[i].Caption;
horizAlignment[i] = Alignment.Center;
vertAlignment[i] = VertAlignment.Middle;
}
tableRows.Add(tableHeader);
horizAlignments.Add(horizAlignment);
vertAlignments.Add(vertAlignment);
table.AddRow(tableHeader, horizAlignment, vertAlignment);
WMeterRsltItemSpec.TableRowNr = 1;
foreach (var mtr in wm.MeterTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Config.Entities.Publish.Always)
{
string[] oneTableRow = new string[tableColumnsCount];
horizAlignment = new Alignment[tableColumnsCount];
vertAlignment = new VertAlignment[tableColumnsCount];
string[] oneTableRow = new string[table.ColumnsCount];
horizAlignment = new Alignment[table.ColumnsCount];
vertAlignment = new VertAlignment[table.ColumnsCount];
for (int i = 0; i < tableColumnsCount; i++)
for (int i = 0; i < table.ColumnsCount; i++)
{
WMeterRsltItemSpec.TableColumnNr = i + 1;
oneTableRow[i] = items[i].Print(wm, mtr.Name()).Split(new char[] { '|' })[0];
@@ -350,48 +282,34 @@ namespace Results.Output.Printers.OnePerMeter
vertAlignment[i] = VertAlignment.Middle;
}
tableRows.Add(oneTableRow);
horizAlignments.Add(horizAlignment);
vertAlignments.Add(vertAlignment);
table.AddRow(oneTableRow, horizAlignment, vertAlignment);
WMeterRsltItemSpec.TableRowNr++;
}
}
return table;
}
void GetContentTestsAreColumns(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items,
out IList<string[]> tableRows, out IList<Alignment[]> horizAlignments, out IList<VertAlignment[]> vertAlignments)
Table GetTable_TestsAreColumns(Results.Entities.WaterMeter wm, IList<WMeterRsltItemSpec> items, TableStyle style)
{
/// Left column contains row captions
///
/// Calculate columns count
///
int tableColumnsCount = 1; /// Left column contains item caption
int columnsCount = 1; /// Left column contains item caption
foreach (var mtr in wm.MeterTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Config.Entities.Publish.Always)
{
tableColumnsCount++; /// One additional column for each test to be published
columnsCount++; /// One additional column for each test to be published
}
}
///
/// Alignment of columns
///
tableRows = new List<string[]>();
horizAlignments = new List<Alignment[]>();
vertAlignments = new List<VertAlignment[]>();
int columnsCount = 1;
foreach (var mtr in wm.MeterTestRslts)
{
if (mtr != null && mtr.IsPilotRslt() && mtr.Publish() == Config.Entities.Publish.Always)
{
columnsCount++;
}
}
Table table = new Table(columnsCount);
table.Style = style;
///
/// Table content
@@ -399,9 +317,9 @@ namespace Results.Output.Printers.OnePerMeter
WMeterRsltItemSpec.TableRowNr = 1;
for (int i = 0; i < items.Count; i++)
{
string[] oneTableRow = new string[tableColumnsCount];
Alignment[] horizAlignment = new Alignment[tableColumnsCount];
VertAlignment[] vertAlignment = new VertAlignment[tableColumnsCount];
string[] oneTableRow = new string[columnsCount];
Alignment[] horizAlignment = new Alignment[columnsCount];
VertAlignment[] vertAlignment = new VertAlignment[columnsCount];
oneTableRow[0] = items[i].Caption;
horizAlignment[0] = Alignment.Center;
@@ -422,12 +340,12 @@ namespace Results.Output.Printers.OnePerMeter
}
}
tableRows.Add(oneTableRow);
horizAlignments.Add(horizAlignment);
vertAlignments.Add(vertAlignment);
table.AddRow(oneTableRow, horizAlignment, vertAlignment);
WMeterRsltItemSpec.TableRowNr++;
}
return table;
}
}
}
@@ -32,7 +32,6 @@ namespace Results.Output.Printers.OnePerMeter
public string[] TestItems2;
public string Footer;
public bool TestsAreRows;
public bool TestsAreRows2;
public string ImgFullPathName;
public int ImgLeft;
public int ImgTop;