Output.Printers.OnePagePerMeter.Printer implemented, fixes in Culture configuration, ver. 2.17.695

This commit is contained in:
Milan Hanajik 2017-10-06 13:26:48 +02:00
parent 7d4f1b2a44
commit c9c57db7c1
9 changed files with 99 additions and 107 deletions

View File

@ -45,8 +45,8 @@ namespace Results.Output.Printers.OnePagePerMeter
/// Data to print
///
Results.Entities.Batch batch;
EnhancedPrinterCfg cfg;
Results.Entities.WaterMeter wm;
///
/// Items to print
@ -56,25 +56,16 @@ namespace Results.Output.Printers.OnePagePerMeter
IList<WMeterRsltItemSpec> testItems;
string footer;
///
/// Layout and status
///
int nrWMsOnFirstPage;
int nrWMsOnNextPage;
int nextWMNr; /// nr. of watermeter to be printed as the first one on the next page
int nrPages;
int pageNr; /// Page number to be printed at the bottom of the page
/// <summary>
/// Constructor
/// </summary>
/// <param name="textToPrint">Text to be printed</param>
public EnhancedPrintDocument(Results.Entities.Batch batch, EnhancedPrinterCfg cfg)
public EnhancedPrintDocument(Results.Entities.Batch batch, EnhancedPrinterCfg cfg, Results.Entities.WaterMeter wm)
{
this.batch = batch;
this.cfg = cfg;
this.wm = wm;
topMargin = cfg.TopMargin;
bottomMargin = cfg.BottomMargin;
leftMargin = cfg.LeftMargin;
@ -85,9 +76,9 @@ namespace Results.Output.Printers.OnePagePerMeter
footer = string.IsNullOrEmpty(cfg.Footer) ? string.Empty : cfg.Footer.Replace("~", Environment.NewLine);
/// Initialize fonts
titleFont = new Font(cfg.TitFntFml, cfg.TitFntSz, (FontStyle)cfg.TitFntSty);
headerFont = new Font(cfg.HdrFntFml, cfg.HdrFntSz, (FontStyle)cfg.HdrFntSty);
font = new Font(cfg.BodyFntFml, cfg.BodyFntSz, (FontStyle)cfg.BodyFntSty);
titleFont = new Font((cfg.TitFntFml != null ? cfg.TitFntFml : "Arial"), (cfg.TitFntSz > 0 ? cfg.TitFntSz : 10), (FontStyle)cfg.TitFntSty);
headerFont = new Font((cfg.HdrFntFml != null ? cfg.HdrFntFml : "Arial"), (cfg.HdrFntSz > 0 ? cfg.HdrFntSz : 10), (FontStyle)cfg.HdrFntSty);
font = new Font((cfg.BodyFntFml != null ? cfg.BodyFntFml : "Arial"), (cfg.BodyFntSz > 0 ? cfg.BodyFntSz : 10), (FontStyle)cfg.BodyFntSty);
/// Set print area size and margins (in dots using 100 dpi)
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
@ -110,13 +101,10 @@ namespace Results.Output.Printers.OnePagePerMeter
/// Calculate the tests count
int testsCount = 0;
if (batch.WaterMeters.Count > 0)
{
foreach (var mtr in batch.WaterMeters[0].MeterTestRslts)
foreach (var mtr in wm.MeterTestRslts)
{
if (mtr.Publish() == Config.Entities.Publish.Always && mtr.IsPilotRslt()) testsCount++;
}
}
/// Prepare document outline
TitleX = cfg.LeftMargin;
@ -129,15 +117,6 @@ namespace Results.Output.Printers.OnePagePerMeter
BodyTop = CommonTop + commonHeight + SpacingOne4Header;
int wmSectionHeight = (testsCount + 1) * SpacingOne + 3 * SpacingOne4Header;
nrWMsOnFirstPage = (printHeight - BodyTop + TitleY - 2 * SpacingOne) / wmSectionHeight;
nrWMsOnNextPage = (printHeight - 2 * SpacingOne) / wmSectionHeight;
nrWMsOnNextPage = Math.Max(nrWMsOnNextPage, 1); /// Prevent division by zero if there are too many WM tests
nrPages = 1 + (batch.WaterMeters.Count - nrWMsOnFirstPage + nrWMsOnNextPage - 1) / nrWMsOnNextPage;
pageNr = 1;
nextWMNr = 0;
}
/// <summary>
@ -169,8 +148,6 @@ namespace Results.Output.Printers.OnePagePerMeter
/// Use the StringFormat class for the text layout of our document
StringFormat format = new StringFormat(StringFormatFlags.LineLimit);
if (pageNr == 1)
{
///----------
/// Title
///----------
@ -201,7 +178,6 @@ namespace Results.Output.Printers.OnePagePerMeter
PrintAt(e, leftMargin, CommonTop + SpacingOne * i, leftColumn[i]);
PrintAt(e, 300, CommonTop + SpacingOne * i, rightColumn[i]);
}
}
///--------
/// Body
@ -209,28 +185,21 @@ namespace Results.Output.Printers.OnePagePerMeter
/// This variable represents the top coordinate of the area where WM results are printed
/// and it is updated (increased by) the value returned by PrintXyzWM() - the section size.
int nextWmTop = (pageNr == 1) ? BodyTop : TitleY;
int nextWmTop = BodyTop;
int wmPosition = wm.WMPosition;
nextWmTop += PrintWM(e, wm, wmPosition, nextWmTop);
int nrWMsOnPage = (pageNr == 1) ? nrWMsOnFirstPage : nrWMsOnNextPage;
for (int wmNr = nextWMNr; wmNr < Math.Min(nextWMNr + nrWMsOnPage, batch.WaterMeters.Count); wmNr++) /// wmNr is 0-based
{
int wmPosition = true ? batch.WaterMeters[wmNr].WMPosition : (wmNr + 1);
nextWmTop += PrintWM(e, batch.WaterMeters[wmNr], wmPosition, nextWmTop);
}
nextWMNr += nrWMsOnPage;
e.HasMorePages = (nextWMNr < batch.WaterMeters.Count);
e.HasMorePages = false;
///----------
/// Footer
///----------
int footerWidth = (int)e.Graphics.MeasureString(footer, font).Width;
PrintAt(e, leftMargin + (printWidth - footerWidth) / 2, topMargin + printHeight - 2 * SpacingOne, footer);
PrintAt(e, leftMargin, topMargin + printHeight - 2 * SpacingOne, footer);
string pageNrText = string.Format("{0} {1}/{2}", Strings.Page, pageNr++, nrPages);
int pageNrWidth = (int)e.Graphics.MeasureString(pageNrText, font).Width;
PrintAt(e, leftMargin + (printWidth - pageNrWidth) / 2, topMargin + printHeight - SpacingOne, pageNrText);
//string pageNrText = string.Format("{0} {1}/{2}", Strings.Page, 1, 1);
//int pageNrWidth = (int)e.Graphics.MeasureString(pageNrText, font).Width;
//PrintAt(e, leftMargin + (printWidth - pageNrWidth) / 2, topMargin + printHeight - SpacingOne, pageNrText);
}

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.17.693.0")]
[assembly: AssemblyFileVersion("2.17.693.0")]
[assembly: AssemblyVersion("2.17.695.0")]
[assembly: AssemblyFileVersion("2.17.695.0")]

View File

@ -435,4 +435,7 @@
<data name="Yes" xml:space="preserve">
<value>Да</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Счетчик воды</value>
</data>
</root>

View File

@ -9,6 +9,9 @@ namespace TBF.BenchControl.Output
EN,
DE,
SK,
CS,
PL,
RU,
Count
}
}

View File

@ -323,6 +323,16 @@ namespace TBF.BenchControl.Output.Printers.Enhanced
flags |= (CfgUpdateFlags.InvokeCfgChange | CfgUpdateFlags.AnyChange);
}
for (Culture i = 0; i < Culture.Count; i++)
{
if (i.ToString().Equals(cultureComboBox.Text) && (config.Culture != i))
{
config.Culture = i;
flags |= (CfgUpdateFlags.InvokeCfgChange | CfgUpdateFlags.AnyChange);
break;
}
}
if ((flags & CfgUpdateFlags.InvokeCfgChange) != 0)
{
Printer.OnCfgChange(this, new CfgChangeArgs(CfgChangeCmd.CfgChange, config));

View File

@ -5,7 +5,7 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;
using Results.Output.Printers.Enhanced;
using Results.Output.Printers.OnePagePerMeter;
using log4net;
namespace TBF.BenchControl.Output.Printers.OnePagePerMeter
@ -19,6 +19,9 @@ namespace TBF.BenchControl.Output.Printers.OnePagePerMeter
public bool SupressPrinting { get { return printerCfg.SupressPrinting; } }
/// <summary> Data to print </summary>
Results.Entities.Batch batch;
///
/// Items to print
///
@ -112,49 +115,33 @@ namespace TBF.BenchControl.Output.Printers.OnePagePerMeter
/// <returns>Reference to the operation</returns>
public IOperation PrintResultsOp(Results.Entities.Batch batch)
{
thread = new Thread(() =>
{
PrintResults(batch);
completed = true;
});
thread.CurrentCulture = Thread.CurrentThread.CurrentCulture;
thread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture;
if (printerCfg.Culture > Culture.system && printerCfg.Culture < Culture.Count)
{
thread.CurrentCulture = new CultureInfo(printerCfg.Culture.ToString());
}
this.batch = batch;
return this;
}
/// <summary>Start this operation</summary>
public void Start()
{
completed = false;
abort = false;
thread.Start();
foreach (var wm in batch.WaterMeters)
{
PrintResults(batch, wm);
}
}
/// <summary>Run this operation</summary>
/// <returns>Event.ResultsPrinted</returns>
public Event Run()
{
if (completed)
return Event.ResultsPrinted;
else
return Event.Busy;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
if (!completed) abort = true;
}
void PrintResults(Results.Entities.Batch batch)
void PrintResults(Results.Entities.Batch batch, Results.Entities.WaterMeter wm)
{
CultureInfo culture = Thread.CurrentThread.CurrentCulture;
try { culture = new System.Globalization.CultureInfo(printerCfg.Culture.ToString()); }
@ -184,7 +171,7 @@ namespace TBF.BenchControl.Output.Printers.OnePagePerMeter
Footer = printerCfg.Footer,
};
new Results.Output.Printers.Enhanced.EnhancedPrintDocument(batch, cfg).Print();
new EnhancedPrintDocument(batch, cfg, wm).Print();
}
}
}

View File

@ -323,6 +323,16 @@ namespace TBF.BenchControl.Output.Printers.OnePagePerMeter
flags |= (CfgUpdateFlags.InvokeCfgChange | CfgUpdateFlags.AnyChange);
}
for (Culture i = 0; i < Culture.Count; i++)
{
if (i.ToString().Equals(cultureComboBox.Text) && (config.Culture != i))
{
config.Culture = i;
flags |= (CfgUpdateFlags.InvokeCfgChange | CfgUpdateFlags.AnyChange);
break;
}
}
if ((flags & CfgUpdateFlags.InvokeCfgChange) != 0)
{
Printer.OnCfgChange(this, new CfgChangeArgs(CfgChangeCmd.CfgChange, config));

View File

@ -437,6 +437,16 @@ namespace TBF.BenchControl.Output.Printers.Zapiska
if (config.Footer != footer) { config.Footer = footer; flags |= (CfgUpdateFlags.InvokeCfgChange | CfgUpdateFlags.AnyChange); }
for (Culture i = 0; i < Culture.Count; i++)
{
if (i.ToString().Equals(cultureComboBox.Text) && (config.Culture != i))
{
config.Culture = i;
flags |= (CfgUpdateFlags.InvokeCfgChange | CfgUpdateFlags.AnyChange);
break;
}
}
if ((flags & CfgUpdateFlags.InvokeCfgChange) != 0)
{
Printer.OnCfgChange(this, new CfgChangeArgs(CfgChangeCmd.CfgChange, config));

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.17.694.1")]
[assembly: AssemblyFileVersion("2.17.694.1")]
[assembly: AssemblyVersion("2.17.695.1")]
[assembly: AssemblyFileVersion("2.17.695.1")]