From 1fe764c55ef104d59cccfe15071c257be5ba6fbc Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Fri, 11 Nov 2022 22:59:52 +0000 Subject: [PATCH] GridPrinter: More options to control the preview's toolbar. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8609 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../examples/multi-language/main.lfm | 65 +- .../examples/multi-language/main.pas | 14 +- .../languages/gridprnstrings.de.po | 89 +- .../languages/gridprnstrings.en.po | 92 +- .../gridprinter/languages/gridprnstrings.pot | 87 +- .../languages/multilanguage_demo.de.po | 19 +- .../languages/multilanguage_demo.en.po | 19 +- .../languages/multilanguage_demo.pot | 17 + .../gridprinter/source/gridprnpreviewform.lfm | 856 ++++++++++-------- .../gridprinter/source/gridprnpreviewform.lrj | 39 +- .../gridprinter/source/gridprnpreviewform.pas | 244 ++++- .../gridprinter/source/gridprnstrings.pas | 28 +- 12 files changed, 1089 insertions(+), 480 deletions(-) diff --git a/components/gridprinter/examples/multi-language/main.lfm b/components/gridprinter/examples/multi-language/main.lfm index 0cb154d9e..bc1ce416f 100644 --- a/components/gridprinter/examples/multi-language/main.lfm +++ b/components/gridprinter/examples/multi-language/main.lfm @@ -15,12 +15,12 @@ object MainForm: TMainForm AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnPrint - Left = 6 - Height = 419 - Top = 35 - Width = 644 + Left = 8 + Height = 411 + Top = 39 + Width = 640 Anchors = [akTop, akLeft, akRight, akBottom] - BorderSpacing.Around = 6 + BorderSpacing.Around = 8 ColCount = 6 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSizing, goColSizing, goEditing, goThumbTracking, goSmoothScroll, goCellEllipsis] RowCount = 6 @@ -30,13 +30,13 @@ object MainForm: TMainForm AnchorSideLeft.Control = Owner AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 6 + Left = 8 Height = 25 - Top = 460 + Top = 458 Width = 60 Anchors = [akLeft, akBottom] AutoSize = True - BorderSpacing.Around = 6 + BorderSpacing.Around = 8 Caption = 'Print...' OnClick = btnPrintClick TabOrder = 1 @@ -45,9 +45,9 @@ object MainForm: TMainForm AnchorSideLeft.Control = cmbDialogs AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrint - Left = 260 + Left = 264 Height = 25 - Top = 460 + Top = 458 Width = 76 AutoSize = True BorderSpacing.Left = 24 @@ -60,11 +60,11 @@ object MainForm: TMainForm AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrint AnchorSideTop.Side = asrCenter - Left = 72 + Left = 76 Height = 23 - Top = 461 + Top = 459 Width = 164 - BorderSpacing.Left = 6 + DropDownCount = 24 ItemHeight = 15 Items.Strings = ( 'RSNoPrinterDialog' @@ -82,12 +82,13 @@ object MainForm: TMainForm AnchorSideTop.Side = asrCenter AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - Left = 342 + Left = 348 Height = 22 - Top = 461 - Width = 308 + Top = 459 + Width = 300 Anchors = [akTop, akLeft, akRight] - BorderSpacing.Around = 6 + BorderSpacing.Around = 8 + DropDownCount = 24 ItemHeight = 16 Items.Strings = ( 'ppoNavigationBtns' @@ -97,30 +98,34 @@ object MainForm: TMainForm 'ppoMarginsBtn' 'ppoHeaderFooterBtn' 'ppoPrintOrderBtns ' + 'ppoCenterBtns' + 'ppoPageSetupBtn' + 'ppoPageInfo' + 'ppoZoomInfo' ) OnItemChange = ccbPreviewOptionsItemChange TabOrder = 4 end object Panel1: TPanel - Left = 0 - Height = 29 - Top = 0 - Width = 656 + Left = 8 + Height = 23 + Top = 8 + Width = 640 Align = alTop AutoSize = True + BorderSpacing.Around = 8 BevelOuter = bvNone - ClientHeight = 29 - ClientWidth = 656 + ClientHeight = 23 + ClientWidth = 640 TabOrder = 5 object Label1: TLabel AnchorSideLeft.Control = Panel1 AnchorSideTop.Control = cmbLanguages AnchorSideTop.Side = asrCenter - Left = 6 + Left = 0 Height = 15 - Top = 10 + Top = 4 Width = 55 - BorderSpacing.Left = 6 Caption = 'Language:' end object cmbLanguages: TComboBox @@ -129,14 +134,12 @@ object MainForm: TMainForm AnchorSideTop.Control = Panel1 AnchorSideRight.Control = Panel1 AnchorSideRight.Side = asrBottom - Left = 67 + Left = 61 Height = 23 - Top = 6 - Width = 581 + Top = 0 + Width = 579 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 - BorderSpacing.Top = 6 - BorderSpacing.Right = 8 ItemHeight = 15 OnChange = cmbLanguagesChange Style = csDropDownList diff --git a/components/gridprinter/examples/multi-language/main.pas b/components/gridprinter/examples/multi-language/main.pas index 5b8ef2fd6..ea57beda8 100644 --- a/components/gridprinter/examples/multi-language/main.pas +++ b/components/gridprinter/examples/multi-language/main.pas @@ -65,6 +65,10 @@ resourcestring RSPageMarginsButtons = 'Page margins button'; RSHeaderFooterButton = 'Header/footer button'; RSPrintOrderButtons = 'Print order: colums first or rows first'; + RSCenterButtons = 'Buttons for centering grid on page'; + RSPageSetupButton = 'Page setup dropdown-menu'; + RSPageNumberInfoPanel = 'Page number info'; + RSZoomLevelInfoPanel = 'Zoom level info'; { TMainForm } @@ -92,6 +96,10 @@ begin if ccbPreviewOptions.Checked[4] then Include(optns, ppoMarginsBtn); if ccbPreviewOptions.Checked[5] then Include(optns, ppoHeaderFooterBtn); if ccbPreviewOptions.Checked[6] then Include(optns, ppoPrintOrderBtns); + if ccbPreviewOptions.Checked[7] then Include(optns, ppoCenterBtns); + if ccbPreviewOptions.Checked[8] then Include(optns, ppoPageSetupBtn); + if ccbPreviewOptions.Checked[9] then Include(optns, ppoPageNumberInfo); + if ccbPreviewOptions.Checked[10] then Include(optns, ppoZoomLevelInfo); GridPrintPreviewDialog1.Options := optns; end; @@ -110,7 +118,7 @@ begin cmbDialogs.ItemIndex := 2; ccbPreviewOptions.ItemIndex := 0; for i := 0 to ccbPreviewOptions.Count-1 do - ccbPreviewOptions.Checked[i] := true; + ccbPreviewOptions.Checked[i] := TGridPrintPreviewOption(i) in DEFAULT_GRIDPRN_OPTIONS; FLanguagesDir := ExpandFileName(Application.Location + '../../languages/'); PopulateLanguages; @@ -212,6 +220,10 @@ begin ccbPreviewOptions.Items[4] := RSPageMarginsButtons; ccbPreviewOptions.Items[5] := RSHeaderFooterButton; ccbPreviewOptions.Items[6] := RSPrintOrderButtons; + ccbPreviewOptions.Items[7] := RSCenterButtons; + ccbPreviewOptions.Items[8] := RSPageSetupButton; + ccbPreviewOptions.Items[9] := RSPageNumberInfoPanel; + ccbPreviewOptions.Items[10] := RSZoomLevelInfoPanel; ccbPreviewOptions.ItemIndex := idx2; end; diff --git a/components/gridprinter/languages/gridprnstrings.de.po b/components/gridprinter/languages/gridprnstrings.de.po index f22b23e42..584efe81d 100644 --- a/components/gridprinter/languages/gridprnstrings.de.po +++ b/components/gridprinter/languages/gridprnstrings.de.po @@ -9,12 +9,30 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.1.1\n" +"X-Generator: Poedit 3.2\n" #: gridprnstrings.rsbottommargin msgid "Bottom margin" msgstr "Unterer Rand" +#: gridprnstrings.rscenterhor +msgctxt "gridprnstrings.rscenterhor" +msgid "Center horizontally" +msgstr "Horizontal zentrieren" + +#: gridprnstrings.rscenterhorhint +msgid "Center grid in page horizontally" +msgstr "Die Tabelle auf der Seite horizontal zentrieren" + +#: gridprnstrings.rscentervert +msgctxt "gridprnstrings.rscentervert" +msgid "Center vertically" +msgstr "Vertikal zentrieren" + +#: gridprnstrings.rscenterverthint +msgid "Center grid in page vertically" +msgstr "Die Tabelle auf der Seite vertikal zentrieren" + #: gridprnstrings.rsclose msgid "Close" msgstr "Schließen" @@ -35,7 +53,13 @@ msgstr "Fußzeilen-Rand" msgid "Header" msgstr "Kopfzeile" -#: gridprnstrings.rsheaderfooterconfig +#: gridprnstrings.rsheaderfooter +msgctxt "gridprnstrings.rsheaderfooter" +msgid "Header/footer..." +msgstr "Kopf-/Fußzeile" + +#: gridprnstrings.rsheaderfooterhint +msgctxt "gridprnstrings.rsheaderfooterhint" msgid "Header/footer configuration" msgstr "Kopf/Fußzeilen-Konfiguration" @@ -63,7 +87,13 @@ msgstr "" msgid "Header margin" msgstr "Kopfzeilen-Rand" -#: gridprnstrings.rslandscapepageorientation +#: gridprnstrings.rslandscape +msgctxt "gridprnstrings.rslandscape" +msgid "Landscape" +msgstr "Querformat" + +#: gridprnstrings.rslandscapehint +msgctxt "gridprnstrings.rslandscapehint" msgid "Landscape page orientation" msgstr "Seite im Querformat" @@ -85,14 +115,42 @@ msgstr "Originalgröße (100%)" #: gridprnstrings.rspageandzoominfo #, object-pascal-format -msgid "Page %d of %d, Zoom %d %%" +msgid "Page %0:d of %1:d, Zoom %2:d %%" msgstr "Seite %d von %d, Skalierung %d %%" +#: gridprnstrings.rspageinfo +#, object-pascal-format +msgid "Page %0:d of %1:d" +msgstr "Seite %0:d von %1:d" + +#: gridprnstrings.rspageinfopanel +msgid "Page numbers" +msgstr "Seitenzahlen" + +#: gridprnstrings.rspagemargins +msgctxt "gridprnstrings.rspagemargins" +msgid "Margins" +msgstr "Seitenränder" + #: gridprnstrings.rspagemarginsconfig msgid "Page margins configuration" msgstr "Einstellung der Seitenränder" -#: gridprnstrings.rsportraitpageorientation +#: gridprnstrings.rspagemarginshint +msgid "Page margins" +msgstr "Seitenränder" + +#: gridprnstrings.rspagesetuphint +msgid "Page setup options" +msgstr "Seiteneinrichtungs-Optionen" + +#: gridprnstrings.rsportrait +msgctxt "gridprnstrings.rsportrait" +msgid "Portrait" +msgstr "Hochformat" + +#: gridprnstrings.rsportraithint +msgctxt "gridprnstrings.rsportraithint" msgid "Portrait page orientation" msgstr "Seite im Hochformat" @@ -101,6 +159,12 @@ msgid "Print" msgstr "Drucken" #: gridprnstrings.rsprintcolsfirst +msgctxt "gridprnstrings.rsprintcolsfirst" +msgid "Columns first" +msgstr "Spalten zuerst" + +#: gridprnstrings.rsprintcolsfirsthint +msgctxt "gridprnstrings.rsprintcolsfirsthint" msgid "" "First print columns from top to bottom,\n" "then print from left to right" @@ -126,6 +190,12 @@ msgid "Preview..." msgstr "Druckvorschau..." #: gridprnstrings.rsprintrowsfirst +msgctxt "gridprnstrings.rsprintrowsfirst" +msgid "Rows first" +msgstr "Zeilen zuerst" + +#: gridprnstrings.rsprintrowsfirsthint +msgctxt "gridprnstrings.rsprintrowsfirsthint" msgid "" "First print rows from left to right,\n" "then print from top to bottom" @@ -181,6 +251,15 @@ msgstr "Oberer Rand" msgid "Zoom in" msgstr "Vergrößern" +#: gridprnstrings.rszoominfo +#, object-pascal-format +msgid "Zoom %2:d %%" +msgstr "Skalierung %2:d %%" + +#: gridprnstrings.rszoominfopanel +msgid "Zoom level" +msgstr "Skalierungsniveau" + #: gridprnstrings.rszoomout msgid "Zoom out" msgstr "Verkleinern" diff --git a/components/gridprinter/languages/gridprnstrings.en.po b/components/gridprinter/languages/gridprnstrings.en.po index 273ae77c1..44b901fa3 100644 --- a/components/gridprinter/languages/gridprnstrings.en.po +++ b/components/gridprinter/languages/gridprnstrings.en.po @@ -9,12 +9,30 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.1.1\n" +"X-Generator: Poedit 3.2\n" #: gridprnstrings.rsbottommargin msgid "Bottom margin" msgstr "Bottom margin" +#: gridprnstrings.rscenterhor +msgctxt "gridprnstrings.rscenterhor" +msgid "Center horizontally" +msgstr "Center horizontally" + +#: gridprnstrings.rscenterhorhint +msgid "Center grid in page horizontally" +msgstr "Center grid in page horizontally" + +#: gridprnstrings.rscentervert +msgctxt "gridprnstrings.rscentervert" +msgid "Center vertically" +msgstr "Center vertically" + +#: gridprnstrings.rscenterverthint +msgid "Center grid in page vertically" +msgstr "Center grid in page vertically" + #: gridprnstrings.rsclose msgid "Close" msgstr "Close" @@ -35,7 +53,13 @@ msgstr "Footer margin" msgid "Header" msgstr "Header" -#: gridprnstrings.rsheaderfooterconfig +#: gridprnstrings.rsheaderfooter +msgctxt "gridprnstrings.rsheaderfooter" +msgid "Header/footer..." +msgstr "Header/footer..." + +#: gridprnstrings.rsheaderfooterhint +msgctxt "gridprnstrings.rsheaderfooterhint" msgid "Header/footer configuration" msgstr "Header/footer configuration" @@ -63,7 +87,13 @@ msgstr "" msgid "Header margin" msgstr "Header margin" -#: gridprnstrings.rslandscapepageorientation +#: gridprnstrings.rslandscape +msgctxt "gridprnstrings.rslandscape" +msgid "Landscape" +msgstr "Landscape" + +#: gridprnstrings.rslandscapehint +msgctxt "gridprnstrings.rslandscapehint" msgid "Landscape page orientation" msgstr "Landscape page orientation" @@ -85,14 +115,43 @@ msgstr "Original size (100%)" #: gridprnstrings.rspageandzoominfo #, object-pascal-format -msgid "Page %d of %d, Zoom %d %%" -msgstr "Page %d of %d, Zoom %d %%" +#| msgid "Page %d of %d, Zoom %d %%" +msgid "Page %0:d of %1:d, Zoom %2:d %%" +msgstr "Page %0:d of %1:d, Zoom %2:d %%" + +#: gridprnstrings.rspageinfo +#, object-pascal-format +msgid "Page %0:d of %1:d" +msgstr "Page %0:d of %1:d" + +#: gridprnstrings.rspageinfopanel +msgid "Page numbers" +msgstr "Page numbers" + +#: gridprnstrings.rspagemargins +msgctxt "gridprnstrings.rspagemargins" +msgid "Margins" +msgstr "Margins" #: gridprnstrings.rspagemarginsconfig msgid "Page margins configuration" msgstr "Page margins configuration" -#: gridprnstrings.rsportraitpageorientation +#: gridprnstrings.rspagemarginshint +msgid "Page margins" +msgstr "Page margins" + +#: gridprnstrings.rspagesetuphint +msgid "Page setup options" +msgstr "Page setup options" + +#: gridprnstrings.rsportrait +msgctxt "gridprnstrings.rsportrait" +msgid "Portrait" +msgstr "Portrait" + +#: gridprnstrings.rsportraithint +msgctxt "gridprnstrings.rsportraithint" msgid "Portrait page orientation" msgstr "Portrait page orientation" @@ -101,6 +160,12 @@ msgid "Print" msgstr "Print" #: gridprnstrings.rsprintcolsfirst +msgctxt "gridprnstrings.rsprintcolsfirst" +msgid "Columns first" +msgstr "Columns first" + +#: gridprnstrings.rsprintcolsfirsthint +msgctxt "gridprnstrings.rsprintcolsfirsthint" msgid "" "First print columns from top to bottom,\n" "then print from left to right" @@ -126,6 +191,12 @@ msgid "Preview..." msgstr "Preview..." #: gridprnstrings.rsprintrowsfirst +msgctxt "gridprnstrings.rsprintrowsfirst" +msgid "Rows first" +msgstr "Rows first" + +#: gridprnstrings.rsprintrowsfirsthint +msgctxt "gridprnstrings.rsprintrowsfirsthint" msgid "" "First print rows from left to right,\n" "then print from top to bottom" @@ -181,6 +252,15 @@ msgstr "Top margin" msgid "Zoom in" msgstr "Zoom in" +#: gridprnstrings.rszoominfo +#, object-pascal-format +msgid "Zoom %2:d %%" +msgstr "Zoom %2:d %%" + +#: gridprnstrings.rszoominfopanel +msgid "Zoom level" +msgstr "Zoom level" + #: gridprnstrings.rszoomout msgid "Zoom out" msgstr "Zoom out" diff --git a/components/gridprinter/languages/gridprnstrings.pot b/components/gridprinter/languages/gridprnstrings.pot index 8934b6770..a55f1ba7a 100644 --- a/components/gridprinter/languages/gridprnstrings.pot +++ b/components/gridprinter/languages/gridprnstrings.pot @@ -5,6 +5,24 @@ msgstr "Content-Type: text/plain; charset=UTF-8" msgid "Bottom margin" msgstr "" +#: gridprnstrings.rscenterhor +msgctxt "gridprnstrings.rscenterhor" +msgid "Center horizontally" +msgstr "" + +#: gridprnstrings.rscenterhorhint +msgid "Center grid in page horizontally" +msgstr "" + +#: gridprnstrings.rscentervert +msgctxt "gridprnstrings.rscentervert" +msgid "Center vertically" +msgstr "" + +#: gridprnstrings.rscenterverthint +msgid "Center grid in page vertically" +msgstr "" + #: gridprnstrings.rsclose msgid "Close" msgstr "" @@ -25,7 +43,13 @@ msgstr "" msgid "Header" msgstr "" -#: gridprnstrings.rsheaderfooterconfig +#: gridprnstrings.rsheaderfooter +msgctxt "gridprnstrings.rsheaderfooter" +msgid "Header/footer..." +msgstr "" + +#: gridprnstrings.rsheaderfooterhint +msgctxt "gridprnstrings.rsheaderfooterhint" msgid "Header/footer configuration" msgstr "" @@ -45,7 +69,13 @@ msgstr "" msgid "Header margin" msgstr "" -#: gridprnstrings.rslandscapepageorientation +#: gridprnstrings.rslandscape +msgctxt "gridprnstrings.rslandscape" +msgid "Landscape" +msgstr "" + +#: gridprnstrings.rslandscapehint +msgctxt "gridprnstrings.rslandscapehint" msgid "Landscape page orientation" msgstr "" @@ -67,14 +97,42 @@ msgstr "" #: gridprnstrings.rspageandzoominfo #, object-pascal-format -msgid "Page %d of %d, Zoom %d %%" +msgid "Page %0:d of %1:d, Zoom %2:d %%" +msgstr "" + +#: gridprnstrings.rspageinfo +#, object-pascal-format +msgid "Page %0:d of %1:d" +msgstr "" + +#: gridprnstrings.rspageinfopanel +msgid "Page numbers" +msgstr "" + +#: gridprnstrings.rspagemargins +msgctxt "gridprnstrings.rspagemargins" +msgid "Margins" msgstr "" #: gridprnstrings.rspagemarginsconfig msgid "Page margins configuration" msgstr "" -#: gridprnstrings.rsportraitpageorientation +#: gridprnstrings.rspagemarginshint +msgid "Page margins" +msgstr "" + +#: gridprnstrings.rspagesetuphint +msgid "Page setup options" +msgstr "" + +#: gridprnstrings.rsportrait +msgctxt "gridprnstrings.rsportrait" +msgid "Portrait" +msgstr "" + +#: gridprnstrings.rsportraithint +msgctxt "gridprnstrings.rsportraithint" msgid "Portrait page orientation" msgstr "" @@ -83,6 +141,12 @@ msgid "Print" msgstr "" #: gridprnstrings.rsprintcolsfirst +msgctxt "gridprnstrings.rsprintcolsfirst" +msgid "Columns first" +msgstr "" + +#: gridprnstrings.rsprintcolsfirsthint +msgctxt "gridprnstrings.rsprintcolsfirsthint" msgid "" "First print columns from top to bottom,\n" "then print from left to right" @@ -106,6 +170,12 @@ msgid "Preview..." msgstr "" #: gridprnstrings.rsprintrowsfirst +msgctxt "gridprnstrings.rsprintrowsfirst" +msgid "Rows first" +msgstr "" + +#: gridprnstrings.rsprintrowsfirsthint +msgctxt "gridprnstrings.rsprintrowsfirsthint" msgid "" "First print rows from left to right,\n" "then print from top to bottom" @@ -159,6 +229,15 @@ msgstr "" msgid "Zoom in" msgstr "" +#: gridprnstrings.rszoominfo +#, object-pascal-format +msgid "Zoom %2:d %%" +msgstr "" + +#: gridprnstrings.rszoominfopanel +msgid "Zoom level" +msgstr "" + #: gridprnstrings.rszoomout msgid "Zoom out" msgstr "" diff --git a/components/gridprinter/languages/multilanguage_demo.de.po b/components/gridprinter/languages/multilanguage_demo.de.po index 985753a29..49a806abd 100644 --- a/components/gridprinter/languages/multilanguage_demo.de.po +++ b/components/gridprinter/languages/multilanguage_demo.de.po @@ -9,7 +9,11 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.1.1\n" +"X-Generator: Poedit 3.2\n" + +#: main.rscenterbuttons +msgid "Buttons for centering grid on page" +msgstr "Schalter zum Zentrieren der Tabelle auf der Seite" #: main.rsheaderfooterbutton msgid "Header/footer button" @@ -31,10 +35,19 @@ msgstr "Kein Dialog" msgid "Page margins button" msgstr "Schalter für Seitenränder" +#: main.rspagenumberinfopanel +msgid "Page number info" +msgstr "Seitennummer-Information" + #: main.rspageorientationbuttons msgid "Page orientation buttons" msgstr "Schalter für Seitenausrichtung" +#: main.rspagesetupbutton +msgctxt "main.rspagesetupbutton" +msgid "Page setup dropdown-menu" +msgstr "Seiteneinrichtungs-Menü" + #: main.rspagesetupdialog msgid "Page setup dialog" msgstr "Seiteneinrichtungsdialog" @@ -55,6 +68,10 @@ msgstr "Druckreihenfolge: Spalten oder Zeilen zuerst" msgid "Zoom buttons" msgstr "Schalter für Vergrößerung" +#: main.rszoomlevelinfopanel +msgid "Zoom level info" +msgstr "Skalierungs-Information" + #: tmainform.btnpreview.caption msgid "Preview..." msgstr "Druckvorschau..." diff --git a/components/gridprinter/languages/multilanguage_demo.en.po b/components/gridprinter/languages/multilanguage_demo.en.po index abf56e9e8..4b82e0d63 100644 --- a/components/gridprinter/languages/multilanguage_demo.en.po +++ b/components/gridprinter/languages/multilanguage_demo.en.po @@ -9,7 +9,11 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.1.1\n" +"X-Generator: Poedit 3.2\n" + +#: main.rscenterbuttons +msgid "Buttons for centering grid on page" +msgstr "Buttons for centering grid on page" #: main.rsheaderfooterbutton msgid "Header/footer button" @@ -31,10 +35,19 @@ msgstr "No printer dialog" msgid "Page margins button" msgstr "Page margins button" +#: main.rspagenumberinfopanel +msgid "Page number info" +msgstr "Page number info" + #: main.rspageorientationbuttons msgid "Page orientation buttons" msgstr "Page orientation buttons" +#: main.rspagesetupbutton +msgctxt "main.rspagesetupbutton" +msgid "Page setup dropdown-menu" +msgstr "Page setup dropdown-menu" + #: main.rspagesetupdialog msgid "Page setup dialog" msgstr "Page setup dialog" @@ -55,6 +68,10 @@ msgstr "Print order: colums first or rows first" msgid "Zoom buttons" msgstr "Zoom buttons" +#: main.rszoomlevelinfopanel +msgid "Zoom level info" +msgstr "Zoom level info" + #: tmainform.btnpreview.caption msgid "Preview..." msgstr "Preview..." diff --git a/components/gridprinter/languages/multilanguage_demo.pot b/components/gridprinter/languages/multilanguage_demo.pot index db3ddb19e..2e22c3844 100644 --- a/components/gridprinter/languages/multilanguage_demo.pot +++ b/components/gridprinter/languages/multilanguage_demo.pot @@ -1,6 +1,10 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" +#: main.rscenterbuttons +msgid "Buttons for centering grid on page" +msgstr "" + #: main.rsheaderfooterbutton msgid "Header/footer button" msgstr "" @@ -21,10 +25,19 @@ msgstr "" msgid "Page margins button" msgstr "" +#: main.rspagenumberinfopanel +msgid "Page number info" +msgstr "" + #: main.rspageorientationbuttons msgid "Page orientation buttons" msgstr "" +#: main.rspagesetupbutton +msgctxt "main.rspagesetupbutton" +msgid "Page setup dropdown-menu" +msgstr "" + #: main.rspagesetupdialog msgid "Page setup dialog" msgstr "" @@ -45,6 +58,10 @@ msgstr "" msgid "Zoom buttons" msgstr "" +#: main.rszoomlevelinfopanel +msgid "Zoom level info" +msgstr "" + #: tmainform.btnpreview.caption msgid "Preview..." msgstr "" diff --git a/components/gridprinter/source/gridprnpreviewform.lfm b/components/gridprinter/source/gridprnpreviewform.lfm index 07cd0b348..be227cd2a 100644 --- a/components/gridprinter/source/gridprnpreviewform.lfm +++ b/components/gridprinter/source/gridprnpreviewform.lfm @@ -1,23 +1,23 @@ object GridPrintPreviewForm: TGridPrintPreviewForm - Left = 331 + Left = 375 Height = 649 - Top = 129 - Width = 938 + Top = 136 + Width = 840 Caption = 'Print Preview' ClientHeight = 649 - ClientWidth = 938 + ClientWidth = 840 OnActivate = FormActivate Position = poMainFormCenter ShowHint = True LCLVersion = '2.3.0.0' object ToolBar: TToolBar Left = 0 - Height = 24 + Height = 26 Top = 0 - Width = 938 + Width = 840 AutoSize = True - ButtonHeight = 24 - ButtonWidth = 30 + ButtonHeight = 26 + ButtonWidth = 28 Caption = 'ToolBar' EdgeBorders = [] Images = ToolbarImages @@ -31,72 +31,73 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Action = acPrint end object tbClose: TToolButton - Left = 570 + Left = 619 Top = 0 Action = acClose end object tbFirst: TToolButton - Left = 60 + Left = 35 Top = 0 Action = acFirstPage ShowCaption = False end object tbPrev: TToolButton - Left = 90 + Left = 63 Top = 0 Action = acPrevPage ShowCaption = False end object tbNext: TToolButton - Left = 160 + Left = 131 Top = 0 Action = acNextPage ShowCaption = False end object tbLast: TToolButton - Left = 190 + Left = 159 Top = 0 Action = acLastPage ShowCaption = False end object tbDivider1: TToolButton - Left = 55 - Height = 24 + Left = 30 + Height = 26 Top = 0 Caption = 'tbDivider1' Style = tbsDivider end object tbDivider2: TToolButton - Left = 220 - Height = 24 + Left = 187 + Height = 26 Top = 0 Caption = 'tbDivider2' Style = tbsDivider end object tbZoomIn: TToolButton - Left = 225 + Left = 192 Top = 0 Action = acZoomIn ShowCaption = False end object tbDivider3: TToolButton - Left = 375 - Height = 24 + Left = 332 + Height = 26 Top = 0 Caption = 'tbDivider3' Style = tbsDivider + Visible = False end object tbZoomOut: TToolButton - Left = 255 + Left = 220 Top = 0 Action = acZoomOut ShowCaption = False end object InfoPanel: TPanel - Left = 720 - Height = 24 + Left = 672 + Height = 26 Top = -1 - Width = 196 + Width = 68 Align = alRight Alignment = taRightJustify BorderSpacing.Top = 2 @@ -106,99 +107,160 @@ object GridPrintPreviewForm: TGridPrintPreviewForm TabOrder = 0 end object tbZoomWidth: TToolButton - Left = 315 + Left = 276 Top = 0 Action = acZoomToFitWidth ShowCaption = False end object tbZoomHeight: TToolButton - Left = 345 + Left = 304 Top = 0 Action = acZoomToFitHeight ShowCaption = False end object tbZoom100: TToolButton - Left = 285 + Left = 248 Top = 0 Action = acZoom100 ShowCaption = False end - object edPageNumber: TEdit - Left = 120 - Height = 23 - Top = 0 - Width = 40 - Alignment = taCenter - OnEditingDone = edPageNumberEditingDone - OnKeyDown = edPageNumberKeyDown - OnMouseWheel = edPageNumberMouseWheel - TabOrder = 1 - Text = 'edPageNumber' - end - object ToolButton1: TToolButton - Left = 470 + object tbPageMargins: TToolButton + Left = 421 Top = 0 Action = acPageMargins ShowCaption = False Style = tbsCheck + Visible = False end object tbHeaderFooter: TToolButton - Left = 440 + Left = 393 Top = 0 Action = acHeaderFooter ShowCaption = False + Visible = False end object tbDivider4: TToolButton - Left = 500 - Height = 24 + Left = 449 + Height = 26 Top = 0 Caption = 'tbDivider4' Style = tbsDivider + Visible = False end - object tbPortraint: TToolButton - Left = 380 + object tbPortrait: TToolButton + Left = 337 Top = 0 Action = acPortrait ShowCaption = False + Visible = False end object tbLandscape: TToolButton - Left = 410 + Left = 365 Top = 0 Action = acLandscape ShowCaption = False - end - object ToolButton2: TToolButton - Left = 505 - Top = 0 - Action = acPrintColsFirst - ShowCaption = False - end - object ToolButton3: TToolButton - Left = 535 - Top = 0 - Action = acPrintRowsFirst - ShowCaption = False + Visible = False end object tbDivider5: TToolButton - Left = 565 - Height = 24 + Left = 510 + Height = 26 Top = 0 Caption = 'tbDivider5' Style = tbsDivider + Visible = False + end + object tbPageSetup: TToolButton + Left = 576 + Top = 0 + Caption = 'tbPageSetup' + DropdownMenu = PageSetupPopup + ImageIndex = 19 + ShowCaption = False + Style = tbsButtonDrop + end + object tbPrintColsFirst: TToolButton + Left = 454 + Top = 0 + Action = acPrintColsFirst + ShowCaption = False + Visible = False + end + object tbPrintRowsFirst: TToolButton + Left = 482 + Top = 0 + Action = acPrintRowsFirst + ShowCaption = False + Visible = False + end + object tbCenterHor: TToolButton + Left = 515 + Top = 0 + Action = acCenterHor + ShowCaption = False + Visible = False + end + object tbCenterVert: TToolButton + Left = 543 + Top = 0 + Action = acCenterVert + ShowCaption = False + Visible = False + end + object tbDivider6: TToolButton + Left = 571 + Height = 26 + Top = 0 + Caption = 'tbDivider6' + Style = tbsDivider + end + object tbDivider7: TToolButton + Left = 614 + Height = 26 + Top = 0 + Caption = 'tbDivider7' + Style = tbsDivider + end + object PageNoEditPanel: TPanel + Left = 91 + Height = 26 + Top = 0 + Width = 40 + BevelOuter = bvNone + ClientHeight = 26 + ClientWidth = 40 + TabOrder = 1 + object edPageNumber: TEdit + AnchorSideLeft.Control = PageNoEditPanel + AnchorSideTop.Control = PageNoEditPanel + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = PageNoEditPanel + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 23 + Top = 2 + Width = 40 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + OnEditingDone = edPageNumberEditingDone + OnKeyDown = edPageNumberKeyDown + OnMouseWheel = edPageNumberMouseWheel + TabOrder = 0 + Text = 'edPageNumber' + end end end object ScrollBox: TScrollBox Left = 0 - Height = 625 - Top = 24 - Width = 938 + Height = 623 + Top = 26 + Width = 840 HorzScrollBar.Page = 98 HorzScrollBar.Tracking = True VertScrollBar.Page = 98 VertScrollBar.Tracking = True Align = alClient - ClientHeight = 621 - ClientWidth = 934 + ClientHeight = 619 + ClientWidth = 836 Color = clAppWorkspace ParentColor = False TabOrder = 1 @@ -222,263 +284,322 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Left = 248 Top = 56 Bitmap = { - 4C7A1100000010000000100000001A0600000000000078DAED5B4B6CDD4414BD - 8008B0E4271136E5B762C306092A214008A4F215E223B10195C20221D8F12F12 - 15A8503E855D11AAF8AB24CF2F01DA081650C40A2804819A9084CFE249B0005A - C85349241AC18B39C78CD3C9C463CF789C9797D48B2BDBE339F7DEB99FF1F578 - 1CC7B1C415D17791C42E9487779151746FBC215B4C996C73C5775B3EDADA45B6 - C9B071DB94EBA3BF766CBBFA2D83DA2E328BC6B25AF0E8DB52985685F283EC1F - 5798BF264D34E509920F662C92CB262239458DEF5352C20B6DBC679515491F64 - BD9D8CAB29F79A78B6F11EFABDF5F52B727C862D7781E691678F45911C67E2D9 - 061E8FB30FE5E8D8F1A6DCA4783F62F05CC02FF4057FF69D6CC88D5ABF7DA089 - 788B1C5B844FF488640AF419AF7F78474E4B743264DBF0890E916C467B676C97 - 9C3C312417297DAE59826FCA6DA425ED0DB93E999386E4C2140F9B5CEDEA63D8 - EBBA143FF5AE9C4AFDC1F361E7B8C258D598D338D987318D9BF6CB2265BF09F4 - FF42E3778B9A631F70941DD3E747DAE5185C376853F07D304B8F442EC6C83E8C - 35F37EEB753951F1883916F2A14D49F0C143D43989ED860CFCF4A19C909373B7 - A2DF57894D8FE439CFBF04F666571B7F13C9E9C8B7F5249E2FE73CD14B043B7D - 0B3BEDCCF0FBF9C8914B1DE7E451634E5B8FB6432EF3AD89D7B01DE8B0D107AF - 6139AFDDE3F14C199D1A90B352B9C06EF27C2605E343F5AFC27E25FD17143F35 - F51EC177377C3F206796AC81B6AADA6047592CE8E7FD919CED358F35E4A9143B - 3E28E77A8EF7BEB2D82AF0AAF67852F1F805FCCE0BB17D19FB55E1BF2AE2A7A6 - EE137D459F05F87B87AA89B796C1335619B3213C2687655DFABE091ECF97E1C1 - DCD5F4B8BF9BF845FA47F25C37ED17EABFD0F8A969E588351A6BB58CE7E94ED6 - 760EF51FD7630EB16634DA475DD67A58A3AA77C4453C5CF1EA9975A7E2319BAE - 99F8E0D53AC5A6540F954F5DC3EBFAA73573B7EC17EABFD0F859ED34362CE7A0 - 76BB3B59EBC091D72E38B58ED504FD0ADC1BA06DC991D79144BC5F80FD9198CF - 233949BFC76BE8F22CEFDB78903FE819638DEC76A31EDDC67E99E3858E5CBFC9 - 5BE74FF4403FD31E89AD304E97EF04EC07BDEE3272E551E4DAD35AEC2F59E74D - DF7BD98FFD4BCB6FC89BA6FC74FCA6DD6DE3CFAAC393752FF828CFFED0FB65B4 - 8D64F94FAD215AFDAF9EE7F3C01F065D9B134351126F1867E26F1E23F98D7271 - 3CACEC69E561C63F6D958E173A6C00F66FC563AE4C7D40B9861E5705F21829F9 - 8CBC92D8ACF58CB592FF19B9E795FF26F9E6BF4587AEE5BF654DC139FF6DE377 - CDFF8C9AA0CEFF5590FFE9B74DDBF7CF2ABE8F177C5B75A156D5F26B7C8D5F23 - F1DB2A792F6F1F420773FCE5217603FD8E39F38AB278602FC9E3A1EF6B31F71A - A5C73C1E0578D3369D32BEC9ADCD2DF2F3C653CBEF3DF92BA87FBB57F60D95FC - 6EBF26E69FBC7B2EF38FA36D966DFE49F4E49EA041B960E11ECED9E682A79F30 - BE037A7F9EB32DF56141FEFC638B03D4BEFF2EB7FC80F1B73CECDFEAD5F53F4B - 1D53987F0E7B3272F3AF085F947FA9EF1923A6AE2EF937392817334694AC03BC - F6CA3F152309DE889FBA4676987F02ED97E73F571D6DF11332D7761BEFF81ED2 - AE9FBF2BFAFC6D2D674CA8BD7B7BB94E65F1E71CE2FC637EA3CFC2E3FC13EE93 - E59E6CDB5E6DEE83260F0B9EEB637DCC41EEFFD17334BDE61E58F6B3E0E3744E - 58D46E5E7B9C43D70F7C31597E71C4CCA5B64B7DADC96F398C7F2FED9B6BFF48 - 36E3F89119A35C2BA65FE99B3CFF136BF8BFCEFF1EA9BF6B7C8D3F5ADEFF3DF5 - EED86AFBB2EF21BE78730E29E3379D8727BE6D7C17EC1C4DFFDFF5287E3AE0FF - BDE935F3DF4D53EE30DB921AA7292F2A1B4DF3DCF6EF9365BFCA4B68DF8D383F - 03B54A3FCEF79087C79C3843ACB627B51FF8BF42E6645BBCD4F815C7CFE7B5B1 - 2E66DDACE6CD3EF35F22D4DBB38C0F7D0F30E347E335047A5FE52D8F4346FC33 - CE47885358EE39D8AED7EC3ADEACEDD5FBC076D01FA083D0E705B34F52F737E5 - 55DB7BC12AFE3F67A3C79C399B378F38EC4BEF377D53667F38FD14883F18801D - 617C2C8A9DFFE7CA5907FBCD98B1A56277B73E577A3E07A7CB6215FE4F17BCDA - 933C6CC6BFD27F8F9EBF59C4FFC6F15EFC1EDFC5F5F8D19E5333AE71085D5EF3 - 1DA74DBEE79EECE12AF3FF3F3D4DF8CA + 4C7A1400000010000000100000007F0700000000000078DAED5C496C1C4514FD + 80088BC4814D8AE1C07A2117C42241C416A120B10B011108010A6147C089B005 + 89000A8425700B8A2276423C3D6320B192030438110C8E583CB11DE030121C80 + 043C4A624422B087F73AD54EB9DCD55DD53D1E8F9D3E7C757775BDAA5F7FA9FE + B575A3D1904693686B200D174AC2BBD491F6AE5A92A5669D4C73C5B7BA7EA4D5 + D3641323E3BA59AF0FFFDAB5EEAAB718AABBD499D696E98247DE9AC2D49A587F + 2EF9379AE8BF26F597E569920FA62F904BFA033946B5EF0B525816D2F8CE5A57 + 20B350D77B61BBCAF28089671ADF21DFBB5B56C9A131B25C031A859F3D190472 + 8889671ACA788A79588F8EAD96E57A55F6E3469963F8B1BC289F79074A729D96 + AF07D4DF582A07A7E1433E0219047DC9E71F3F90E3429E8CBA6DF89087409620 + 7DA46F8D1CDD5F91F3143F574EC097E566D284F4925C13F649153937C2432657 + B8EA18F2BA3AC20F7E28C7927F94F998B35DA1ADAACD919DF4A04D55537E71A4 + E4D78FFC5F69E5DDA8FAD8471CEB6E50E7FBD3E5203C97285394BB388E8FB05E + B49179686BE6FBDA5B72B82AA3C1B6B01CCA94041D3C4A9E43DB2EC9DA9F37CA + 61093EB700F9BE0965BADFCF79FF35B037B8CAF8DB408E87BFCD25F17E32FB89 + 7622C8E93BC869758CDEE7C0472E76EC937B8D3E6D2ED276BAF4B7265EC38E80 + 87853E780DCB7EED3E8F6F4AEFE05A3939AA17D8459EDFA4DCF8BCFC37437E19 + F597CB7E0A6A3F82EEAEDDB6564EC818032D53B1C1CAAC58D02F3F04728A573F + 5692E7226CB5534EF36CEF8359B1CDC0ABD8E35955C6AF28EFF43CB2CF22BF66 + E8AF19F65350EB89BAA2CE72E87BA58A899765C1D35669B379CA18E89293A2F1 + 26CA78394B19F45D8D8F875A891FC77F202FB5527E79F597D77E0A9A3A628CC6 + 582DE67BBA9AB19D43FCC7F9989D8C198DF45E97B91EC6A86A8C38AE0C57BCFA + 66DDA1CA188EE64C7CF06A9E6251C487F2A796E175FEA398B955F2CBABBFBCF6 + 33DDA9AF4B4E45EC765738D7812B9F5D706A1EAB0CFA0DB8B741CBC32B9F0309 + F83E05FB13319B0339427FC767F0F222DFDBCA60F9A0178C39B2DB8C787439F3 + C5B6173C72FE26699E3FE403F94C7984B2423B5DD609980F7CDD69F8CA13F0B5 + E735DB9F30CF1B8D7B998FF933D75F9277CCFAA3F69B72B7B53F2E0E0FE7BDA0 + A324F983EFD791D61DA73F358768D5BFFA9E8F02BF077455820D05A1BDA19DA1 + BE790DE477D68BEB1E254F6B19A6FD5356517BC1C3E5C0FEA3CAD89B253E60BD + 061F97E52CA33BE337723EB171F31933C5FF637CCFCBFF4DF2F57F0B0F2DF37F + CB9C82B3FFDBDAEFEAFF313141E1FFD3C0FFA3B54DDBFA6733D6C753D6565DA8 + D6ECFA0B7C819F21F65BCBF82E691FC208FAF87979E406FA037DE6A559F1C05E + 985486BEAFC5DC6B145D93CA48C19BB219C9A29BC4D8DC527F527B8AFADBAFFE + 29E4BFDE2EFB8632AEDBCF88FE27E99D4BFFE3289B49EB7F423EB927A853CE1C + 7B877BA6B9E0A927B46FBB9E9FF74C8B7498E23FFFDAEC00B1EF7F935D7F8EF6 + D73CE45F6BD7F93F4B1C93EA7F0E7B3212FD2F0D9FE67F91EE692326AF2EFE37 + D029E7D346545DDBF9ECE57FCA4642BC613F458CECD0FFE4945F92FE5C79B4D9 + 4F9EBEB6D578C77148BDF8FE4EE9F7B7369936A1F6EE6DE23C95459F7B61E79F + 728D3E0E8FFBCFB84F967BB26D7BB5B90F9A6558F09C1F9B451FE4FE1FDD47A3 + 67EE81653E0BBE11F509E3D2CD678F7BF0BAC11713A71747CCDE487691AEB5FA + 6B0EEDDF44F926CA3F9025B87E62DA28E78AA957EA2649FFC41AFA2FFCBF4DE2 + EF025FE00F94F1BF27DF23B6D83EEB38C4176FF62159F4A697E189AF1BEB8223 + 07D2F9BB36C50FE538BF373463CEDD94E576332D8C71CAF2AA92D110EF6D679F + 2CFB555E43FA3AD8F96CC42A1DB85FCF323CFAC4DDC46A7B523B80DF95A74FB6 + D94B819F72FC68521AE362C6CDAADF9C659E2542BC3D4CFBD0F700D37EB4B22A + A08F95DFF25A31EC9F76DE4D9CC272CFC10A3D66D7F1666CAFC6032B407F8276 + 809F57CC3C61DC5F96376CE382697C3E67A1479F399CD48F38EC4BEF30759365 + 7F38F59413BF2307B69BF631CE76F6F595C30EF2DB6DDA96B2DD757A5FE9F91D + 1CCA8A55F8BF5CF06A4F729769FF8AFFF5BAFFC611CF8D635CFC11C7E2BAFD68 + DFA9DDAE76085EDEF46DA7AD7ECF3DD95D93E1FF497178751F2DCE39FE1FE09C + 850BBEDA2967A83DE0633C40B7F393CA98B07E13480FF7A14356F7A8F3DEF3BE + 0FE444EE338B6B8B05BF00F85BCC35A9AACBFA11CFB4535F25B99B67F8F571CB + 5647BC567F363CB03C779B15CF33F2C0DF9A83FF48FE53D2FE29937F20730CFB + 1D1DE894B3DB79FCDF4EFE6F1977CF76F57FDB3B57FF4F934D92FFF37F29B85F + 65A1671CD6BF77C16E1FA6DF18C433B97FBBE0B7AD93A3907F33680B89FF1AD9 + D22D477AE12B72565F20E79078EF8D5775ABFA3FF7C1F3FF240381DC1F11647A + AFDAF79A8AE7FF6138F71D4B2579BF98FF2BD6FFA6D3FA1FFFDFC3FFC944BEC8 + FBD87FFA58F03C3BCC3303EA9F4383BC8F3B4F6CE251CF4DCC87F48D8C03D877 + 92D4BF9236F21DF324E0ABE1D906E457EB915D1C33876B53480BDFF19F3F167C + D8EF04B24D8DD72AE8132E50FA63191D7CC73CAE786251E7453CA3E2828FE1BF + A2B04EFCE7955F06FDD5E3CE8DA4D9CFFF2FE1BFC1 } BitmapAdv = { - 4C69020000004C7A110000001800000018000000B10B00000000000078DAED5D - 7D8C5D45153FF583F8518D60D468B4884A827F68FC408D1FD1B4318A5634C658 - BFA8FA8F088A1F51C0D428AE5A49255D4C50FF20048948E9BEFB762B58C5A8C5 - 2A6CD5D652BAFB76DBBAED525A43BB24162C867477E9F6797EF79E799DDEDE8F - 99B9735FF775E78F93B77B67EE6FE69E3973CE99B9E79E69B7DBD4EE26F5D1D3 - C6223AE1427CFBA232FC28A2A773DD36D3EF5B0DFAB609A12EEE41DF4CF15B11 - 5D63FACC634DBAD6157F3CA2738AA82ABEF02A97AAE2337FAF2FA285C21F2E9F - D4EF73E18F469319F8B83ECC757FEC2A9F638DF8DE61F55C697CEE4F5F55F907 - 868ECF63F450198F5D49C3BE879FED5B5E0998AA2D7E3EDF7AF294315FC0F82C - 672B45FFAB71DDEB137FF77A7A25CBC96AC65803E2BF3FDF75FED4289F75CFAF - 76B7FD873345ACBBF8796F0799D8115B62DC251A5F9754C3A3452C039F836FA3 - FA0A3957F8F85B3D53ECFF705D13DF0A34BA8ECE55FE1268D700BD290F1F65BA - 8C3FF86B7A41090FCEE3F9FE40870F4DBA15F6260F1F65A8A3F16D3BFA97CB93 - 88364ADD597EE64FA5F5C069FC51FD6AD267E27B92F2BBB37805BDA1F5E3D359 - 7A260F5FFC80CB347DF359BD6CFBCDF44C358FB92FBFCAD36345F8A273EE54FE - C3E6CDF48C4EDB4D7A9FF4FBF8E810BDCA15BF3540AFE6F2B9582E1AF45ECD77 - F8A9F80C7F2DD2C365F88275BFF82A3FD1AE6D96FEAFCEC5DF402FE43A4F81F0 - 77815E5E237DFD9386BF5B78FFC522F9E5677E37A8C49E5D29CF39AEE18F4B9B - 5756B62B0DFAB2E08F69F89B843F3754C567395D2B587F4C5FE3FEFFBD323E63 - 88AFB9B6A373227A8F3CD389D141BAC8197B805EAB7C8953C62959934E481B77 - 39F33EA2DF08C6BFD23A82C7E5639DF9CD63E4C0F7AF6A6B878F96CCEF39D4B7 - E0F9D7D4BCE5FBEEC8ABB77D233D87EBDCA7F5E3772C076FC8D5E783F446DD56 - 70DDBFFC2DA26717F505E5DA7328DAC1FDBA89E7DF3741F81BD75275D6EDBF8D - 9E656C6F9BF411BE67C4C0CFD9C9E3756905BBFE2EC6F83E78C5BFDB98B6F2B5 - DFE21AE3BE73C1F84F81ECE6FB20BD9EE7C1D7E113D581CFF2775874D12DB97D - 584FAFE03AFD5C67A903BE9A3F1BB3CA4722BA80CB1E963A477CE2A7B063DFD3 - 173E7CF3D49A6A78CFDDF43C1FF8BEB0B3F07D6267E1EB7E3B6C04B7B5B8A27C - 7615BF6EFED43DBEDD90CF6ECC2F8FFAA156FD56B77E0E1428D099A1782FA249 - 3796ADE51DD703AF619DF36FD16B876BC4AEB496CDD99FD9EFD306F73AB6F825 - 2D0DFB5EAC91BDAE036AC6AF9B3F67531B75CEAF6EE8876EE8B7408102F50E41 - 07401714BD73F1B2CFC43A0DBAAD06FCBB347DECBD0DD9F3DE14DA306EE35EAD - 8D915EC1AF933FBD8ADD8DF955B77EA85BBF050A14E8CC10F65EB1078BBD5887 - 3889A5D8FBC51E70419D5B5CD761D8B3967B1FC65E764E9D8D7A1CB125FE3D9A - 5ECE6CA30ABED8953F6B6D1C447C8F2F7C9336AAE297B5E1035FE470B11E17C1 - F4CF5EC1CFE0CF01150356C3F81ED0E3CB3CCBE78174ECDA7C9E5FB5EB879AF5 - 5BDDFA39D0596DB7178F37E92BB26E3924B1B5F8DD84EB55F66D59DE3EC9388F - C6F17C4DFA41AB491F1A8DE8EDF86579FF21BE1F609A6A356885430C1EBE159B - 46FC9E1E3FAB13AECBB34DF3EF2A8B7DFE4F08F6D2AC98B89CF98D363E6E683F - 1ECD8A3B8CE76844C7B2DE634BCCE1E191DBE9B925B17478DE892C9EEC594F2F - 838EC16F16AFB86C5F593C642C273C96596545F8F27CABF558D5BC3528E443FD - BF23A217C196C4C4B2037CFCAA6B28D7F03FCCE58F94E0CF30FE3B3AF18DCCEF - 9298C3636ACC711FEE2FC13F5467FF110B8DB9E3C4FF26FD88CBFF50229F5761 - 5EDACA0FE2E2E3EFEA9AF42503F99F829C5AC97F12177BA84CFE65AEACB09CBF - 5F88E37423DACD63F366C398D5556803F3324FFF80277A3CAFD0E36303F41643 - 1DB742F664F6C563D7A04B6319E45F19CB7DB1BC494CBC4B1BE027E63CE62564 - 0FF28DDFF87F1E4B94832731A6631B467B43C9F7294752DF34FD777C90DED64B - 6D802719BC3A9237277DB5E162430DDA50BCFA8FCFFE77C663885E8A7EE337F8 - 3FBDE1FF14AC6F2AFB3F06DF5C54F27F8AC887FF63F0ECD5FC9F0CEA29FFC743 - FF8BFC1F039B5DC9FF29DC03F1E0FF187C1754D9FFC999BFC1FF09FE4FF07FE6 - A9FF93B5DF5FF0CDEF4197F8FFD6205D6C10677FB1E3FEAA777C3CA787BC0907 - 8B7889792F73BFBD33A295EAFF3CDA99E4C768ABFF4DC6AC57F91FF0037EC00F - F8670ABF6EFD5CB77D39CBC6D7BB7F82359225AF876DF66AC467BCAC4C66947C - F15A60C2E63B06539EABBA23112D432C81E937A2B6F8A88B9C3FD2C696B23674 - FCA27C7BE9BAD206722B6CD97B073DDF1BBE36566343B494D781BB79DDB6CD13 - 7FA6CAFA50A5FF2E73CDA6FF55F16DF55AE87FE87FE8FFC2E97FCFF2C7D0BE67 - 91CA01E7D13FC9A2A91083E4FCAD8215FFF1DEA00EFF50AD29E2DC5435F8874A - CE25D7A377FF509F47AEFEA1CD3C75F10F6DF58096BBF2BEAAF83CC6AF2BD375 - 55F51BDAC893ABF9605FBA812FFBED8F64C5C84A6E9843FAFB162BFB75F27D41 - 7FC1BBA6EBF5772136F82C6BC72DF4D0716BFCE4DDF72CF7EFBA027B85F771B3 - BC2EBADA85FF62EF660AF83F8B3A55E4A728FE395D360FE4F3A0E9FEBDCF7731 - 819CF7E2865D6375F4BD445FFB3FB6FB73B6FB3FA998C6F37CEFFF68B6F412D1 - 5B3798CC4553FBAE611F13FC19D62F579BF86226FB3F9D581AC6947CC1880B7A - 324B07B9ECFFE8B1A4EAF9CBF2A95678D769ADEB027EC0EF757C3557157E91FF - E0822F719EFDF1FAAA41DFCDF37F9CF1F53895263DA5FB4FBEF88F36E053B22E - FD465DE35B877FD54DFC32FBEEB2FFE3E95DE15478FF35FFDF7FD9F4C5F7FE46 - 2FBCFF3A1BF61F6C0963CB73E23B75E15791FF5D0DFAA0C8E04C89CE988973E0 - 37E903A6F86C6B96C7B1FE115D8758DC421DCAE58CFD3DB4936E230F1FF313D8 - 9D6B79E7FB68D7E51CB3AD86F8D32AD77F9C8F26A2A3BB06E9C2D3F2D468D751 - 1FF719E29FDC776AD28D2ADE44D9A1CCEB19B26A82DF4ECED169AB5896F8EFF8 - BBFB93D77DE1C7FB949D6FFAEBC13FB9DFE21FDF237FA6F5B3221023ACE42495 - 4FE188A3FC6CC39CB191FFF8FC8A88FE516ADF07E922CCC3B164ADDD67327F05 - 7B066B75039BF1047241481B5B635E15EB9FE9F88C9906BD3F830F9396E79FED - B0F57FE48CC635A594E42EC7370CF75BF93FCC638BBA0DF9F66C8BB1FF6387DF - 27E7DECC1AFB3F96F822EB466D58E327DFFDC4E7E9E15C1C8C07C6DC13FEA493 - FF63889FF3BEA12FE007FC801FF0037E4DF89ACDB0A5F8DE62FC490FF13F93E1 - FD9ED59AD707CF21170F64F971563EA183AF5855E6CB7C458FF899BEA24FFC2C - 5FD11B7E86AFC8F4A027FC4219AC8A5FA4EB027EC05FF0F8156C7A99AD977C02 - ED9A685FB0E1BD47D8D363F9BB027124C86B829C16A5392522BAA0EC5D2FFB06 - E7C859DC732939D95F968F01FBE3383BB924A7C7CFE57CE57E9C4388F37825DE - 6602718E45B16D65BEB53A5B5C3F17BAF3EC43F472EC9D73D92F9CF193DC46D8 - D35B9263839B4C8F39E347B421293FFDEC78E1EF865671FFCAFA1FCA4379289F - A7E55C36D4B29CFFBB86E87C75DEBD8E1FE7588B68998EA5F417EEC9697FB095 - D25F7CED36A6FFE1DDA3C2979C5243D0E3FA9919B0496237FA7362B58F8E37E9 - D653F4F2067AB19C5FF724DB865F8A7E851E3C91753E3DAF657FA6EC07DA466C - A3BCD741CEBAC7D3F9BDE3B6EFA49770D9B8ACE960CB4EE4E5B982FD93B3E3E7 - 52EF711E627A6BEED8721BAD24A71EEA5E65628BB9DEE5F159F5112D37C9EB35 - BA8EF95B92C72B503EC567DA39FAE23C5603E30D5A95255F9AFD5E29B259C51F - 9F838C430E6BC8EB74BEC415626EDD54DB7E581247309797B3DED373609E5D5E - 077E9C7B2D59D35D534B6ECF445F017FB9F73569A267F7425FE5E914C830F2E4 - B1BF3C6021FF91F8B747A167B37461BC7648F4F39CA3EC3F06FB9037C7645D02 - D95D9B67C3AAACA7F26C97A7BD822BE231B78815B69C73D702DF26D63F3DA7B0 - 36821DCBEC3F72C32673EE1227FEB28F023F027638AB0DF8147226FD04D66A4E - 3C48E2599E609C3D59B9EBB07EC51A5364B819CBB4AD2D18A09B254E652A6BAD - 8A6BE02364B9F2DE8C652E5A935CA0CAB7B2CDF36998A776A80E6CD12DCBF27C - 423F448BF2F4CEFF0127F2618F4C7A110000002000000020000000B30D000000 - 00000078DAED5D6B8C1F55153F45041554C017A236C6E0EB93014D14A5E2BB7E - 50636A29F2F0111E41890242C19860EC17AB0245D4885D302ED43EF63FB36DC5 - 6A31B1A6E2B6B5853EDCFD775FA911D8B2AD0462132A7DECBA5DCF993DB3BD3B - 9DC79DB98FF9EFEEF97092FFEEDC99DF9973CF3D8FFB38333E3E0EE342A7D0DE - 00C66DD274C5B725C799805F45D633095FFA7FE6F63FB6E9B2613734ED5897AE - BD7365C78BE4ED4AFF5A0D3FABDF3D519DD856F5CC542F055FF067127EC6D8EE - 9A2DF8D3ADFF67A90FE8925CB71AF5067076B3013F27A2DFBEF111F7E6B81FE9 - 770DF84B14FC25CEC669085F6D06F0C7BE067C51179FDAD23D746F55DCC1D5F0 - 7A7CC67A65ACFC47179FDAC6D75037D6F5AF83D795D4ADF3F1DE5E75AC222F7F - D6C5A7B68971BE979EA9897D1EB61F54EE3DD11BC2CFB605F04A5D7C6A4BF7D0 - BD8A1C067A56C1B9F9F83007DBFE4EC13EBEB7015FAAAA7F88B910AF8FA87D91 - ABD3015CA7BE77338405A6FACF3CA872F87A5ABB7D1BE14CBC3EA43CF35E5BE3 - 0F65F853E5BD9E461ECE481967D72B6D0E24FBDB047FE7067815B63BA8E8F275 - 29FE78D3247E08B7DAB63F2883EF648D25D6F951EE9FFF3557C39B6CE3F7AD85 - 3763DB31BE6764CF7A3847B1571F5564BF436B9C86F083499DC2DF5A363B805D - 8A1E5EAAC8E60605BF5D13FF9324AB88F0B7A6CF58A9C8EC5A45F7EE54F07FA4 - 6B277B3AE13D44DABEA4013F51F0172B7C2D5674EFC70E7DE6BD693A8EF2BB51 - E1EB37CE7C69031E99C4C73E57F4FF52656CEC721873EF89717A02B864D23E04 - F05A656C8CEA8CBF0AF1DAF9F11827AC7D2BE13509DEFE52C6FE94C60FE17645 - C737A5E8C6B5CAF5E1EE157096CD58956CBAD2F75FCBB0D1FB15FB70B713BD0F - E0992CDF42F19AEA7FB37C7F49EC45AAFFC5BFAFC96CBF044EC3361B141E8ED1 - FD95B103B8228A614E3EEF518A71727DE5C45850E32F1A17CBA87F74714977D8 - E78F29CFE94FEA7CE6FD6BE1AD14332662C8217C9F3B282ECEBA6F77006F605B - BE5FBD1775A967600D5C504676142BE2BD1B5372D6B1C88E84F0308EA97B22DD - C2DF6C5BC692ED11FB0FAAAFADD0875F993276F4E900F277B5A5F17B06E7418F - 27F42949C7B1ED5F89E7B418CF06916E91BF271B42362DB26BC81BE27DA28C8E - 0A0909B53E715C720869378EF1B935CCD31E2A1393908F43DBF410C573689BE6 - 599E276ED3F0DD3B549FE90B3F05DB1B7E06F651CC6B3FE51A9FB1B727DA1D6B - 86F03907EB046D3EB1F3F07D6067E147632CA5BF71DCCD77BC4ED3C679C25D3E - B05B15BF6EF9E7E8DF711FFAE793878AF6E7B80FFBD30AF6B715FC8F63FF5B6B - FC5177FC252424242424D4D2E75526D677FFD60CE016EF7B8142B8674A9CD201 - EFAB0DDB237E2AB6C3F5D3445CB43465FE7B99603BDDF376F729EB2BA8035EC6 - 37EA745DD8AD805FB7FC9531FFC394317F9FF0500B0FB5D9DF56F03FADE07F5B - 21FE1012121212129AD17B11D0B7928FC538F836EFFE3D11FFFB8EBB25FF90D8 - 7F3AE41F36F70D4F87FCA3D5E6DF7CC95FE6DF64FEADCEF937DF7EA7EEF84348 - 48484848A8C5EB62CCA5BD6AB4674D3DE36B10E3CE8BF6D205F06BDADF573246 - 3A6461FFDF907A36BB8807DAA368B97EDB5022EECAE5C1363EC63C9F8EF6166B - F2601B3FE22184CF60BF1E49D4C3D845E7F67DE097E1C115BE2E0F2EF1799D6B - 7E9A3EC4674B5DE367F210C25DB301BF4EF993FE25B17DE99F0EB64BFBA3833D - 13ED6FDDFEA76EFF5B77FC5177FC2524245437C19CBE0EB898EA4944FB8C90E8 - 37FDAFA89E8869CD1CA4FBA91E4D4ECD8961AA3562B7660FCCE13A22FFE5DA2D - 5D54A389EA64C5359F7A02B88CEA91E0B52DCCC7E1899A4E66F2886AD705D0C1 - CFDC8A32FE90467CF0E1C933800D58F3543BBCC2E0BD57C767DD76B6C1CB75EF - DDBC194EA7BD7F7C6F58450E4A1DAE5F18E8CC033C3F7F7B85FA4C8749E6F42E - 39F1EFF78932CF00A2CCB82F0E97D149D6F31345FD8DED761215C4E81F29B71E - 1BD53D1CD6A9C7AA83CF71D0566CF7AC8E1E343BE103C99A68C6F8AC4B1336AA - 30C6BA9A6B825D660DBF011FE7F178A5C69A5E54FFADAF13DE99D4B5182F266C - F712D129FF4FE8647700EFD61D07716D30BAC7163ED9485E0FBE4D43565746FD - 1FC2C76CC93FAA113491275D5158EB2980F773DB3B6CEB5F6F275C5462FC6DB1 - F6FE016CA33A58BA7638AED149BEC4143FAEE757544374CA18405B19D9CC00FE - 9EE77734EDEF13482F76AF8337965C5B5FCC63F69706F9627BEC03D3F2730D3D - 5855D5FFF634E0C1E4F9F7A44D29228A1D2886E0FBB717E983D2DF4FA4C567E4 - 03CAF24072E0BE38CCCFD9128D27B4A971FC15D9D7067C97F59CDABC88D4698F - 07D649F4A1C97A7209A26BCB48D7B88EEB904D1E6279901D89EC24C7DFF47BC2 - B64C1DDF84415819BC1E6C76C07B5DE70BC283160F43E5ED83651E42B8C947FE - 98C98327FC9887C4D87CDA87FC1376F23CF46FDF24F28D2DF9BFE4FF92FF9BE7 - FF45E43AFFD78CE59DE5FF25E26027F97F595DB29DFF97E80327F97F16F9CAFF - 75F15DE5FF25D6CD9CE4FF65F5CF76FE5FC29E38C9FF35B19DE5FF9AF657F27F - C9FF25FF97DC5BF27FC9FFA76DFE4FDFE1289BC7A4C4758306BEACB0E6A9CE5E - A8E9844FDF2971F8BDCB7ECD18A44DD947D6A7FC5D96FA62191295CDAF6663FF - 0BBEE00BBEE00BBEE00BBEE00BFEECC2AF3BFEAE3BFF10FDAB37FF4E7C7BB32C - 8DA8DFD53590799F81AED3F7DA6FF4DDE7CA78DD11F110C0B7EAC057BEC75389 - 0753FC680D44E521846F9BE017E95CD658231E682D27FA8E7D036EF68D5F9507 - 9BF8491E74FAA26AFFE3FB2D2FE2B519C2A82BFCDE4EF8A08E7D70257F5BBEC0 - D4E7CC347CD39843E42FF217F98BFC45FE227FC117FD73987FB6598A3F071DCE - BF0CDA96ABD0CC2299FF91F99F569AFFA96ADF6DCDFF98F8171BF33FA6FE4DE6 - 7FCCE67F667BFCDD2AF868CB2EC4FF3F95779E83AE719B0B6DE233F67EAA3D49 - 67F032F778E235AE4FB93FC94355FCFE35F0767EA7233ADFB3271EF8DCE0141E - 0CF28F91CAF14003464CF17B4F9E2B1CDC3B71BE203F0EA0368D891886EE35EF - FFE82CC0F2F86C6310C0CB32EF5F02A7ED0DE1617E463BFD6D45FFE9B9F1B98E - 10EED438BF3805DBCAF8C7E7A1FFF81ED9D93C1B4C6D92D862FF4AE11BADF9BA - DA8B2D346BF3C17E9FF95FC17E18E7F99FE9F836CDFF4CF14DF33F1BF6CD24FF - 53896A3AE3339E41BFF6A0AFFC4FC58ECFF6E1FDE345DFB5B595FF25B04FB04E - FD3B7A460E0FB6F2BF68CC05F0788CC7DFF36A8FF9C1F7B8C665FEC7CF5A89F4 - 0DD51FB32E04F80E97BBCCFF5CC50355F78209BEE00BBEE00BBE3FFC2AFEC72A - 7E05FF6B13BF4AFC61BBFFCBC65F2EF48F78406C8A3F1FAA4BFF7DCF3F087EE5 - FCB3CD51FCD9EF73FD5FD67F65FD57D67F65FD57D67F65FDD5F2FAC3E554DBB3 - 2E7C5BE39FE26FB26DC9EF10EA10DD436391EA3D56C18FFB906A19518E52D647 - F23DC31C532F2F83CFEF4DF51C7FBB6F239C59794E17EF9DAC3197529B320B9F - 65FEAC09F6941A73011CA0FCA2C4FE832324BF943A714BB1FDA69C3A72A9D759 - 062F9578FF53FE4FF50DF3CE21E55DCFB20765F0A36F210470300B3FEFBA0D7C - 1DBB9683E3049FBF51F2645DF8844D31685DF875CB7FA6F67FBAFD89F67C5CAF - DA9753FA3F71BDAAFDE11872B87A6DEFA935C6D92E6CD57E7FAE914C3230E121 - C28E6B8C87F0659DFC133117310FBFE2EB07587E6573D4557C2FF9F0074AE4DF - AB143DB88AFC5695F883BF9DB425EDBD15FC2E83FC7F2C9E37358CBF4CE88449 - 5DC7AADF4D9D826FB0EE6D8CDF801B4C7830C567BF5F99071BF8263CD8C2AFCA - 834D7CB6FF37C53C50DD4F0FFA9F6B1F1CE27795390F671BDFD673055FF0055F - F0055FF0055FF005BF1E7C57642B8EAD485DB6E52A34EDCF77B8D4B7C2F920D7 - E3AD683EC8B5BD29CAFF9DE317CC41F8B0B7793CF8B2F7593CF8F437693CF8F6 - 77C9F9200FFA9F6B1F1CE277D9F4CBAEE523F8822FF8822FF8DEF14F788841B3 - 6353B7F1B7E48342420E29DACF883135EF8F394444BF29B6AEB25791F7CD6FD7 - DA531BC05CC4D995B9DF1AAF511B17F364BC87670FEF65196886B060CF7A3887 - 887ED3FFF859BBA9AD6D7CDA4FCF6D7BE99C56DABEF778CFB78BF5FFDE46B4CF - 8BF2EBCFE7F4CF17F8794F3A98A78C72A7B4774FD44FD05A7777354F5BA14EBE - E00BBEE00BBEE00B7EE976DD2BE02CA2AC76C9EBB6F1F17FFFA4DA8BCD35F0B6 - 643BFA1F5DA33645CFCDAB3348D772F01FE36BDD038FC2ABE376FCBB9BFF7E2C - 13BF012F501BFA5E79569BFE0E7817C73ECFA79E990FA0C9387F52E2D1DFC7DF - 80EB5905E7E6C44C2BB8DDB29C3A87F731FE2369D77BD6C23BF0FA732931F173 - 742DAF5FFB3AE0626C379AB576C573E6147B8DF676C24559CFE909E0126C7354 - C13E4AFFD31A0321DCAADCD78D32B99FA94789ED6FD18891174DB6E73DECA5CE - EBF159B1040D231F0BB59FD380A5445572ABCD9BE174C4FA2CBD6B540BA301F3 - E97F92770A09399913DD6E7D8E11FD09D9F43C5BE914FF248D925DF5294FF2D3 - E447C997C5F97AD5FA41A644BE2CB6DF75D9D038FE209B5E073EF9505DDF3913 - F127E33FF4A3B341FF68FC45B1EA44BC38C6BAB7B0685E93E616A3F9BDC6C9FD - 0936EC4F51BFD35C6D3CA76AD1FE3EAF637F69AE5A994BEEA379CDBCB945EBBA - 39B12F259A4BF6899B38DF4A354A16D4343669ED609CE6CFA73B3EE5D7D88FFF - A23C332FD74BE8FE365BF2277CCEB3235D2ECAF994BC2ED23F5A3B30E561600D - 5CA08CA717D0EFCF2B33FE68EDC0741CE033CEC6676DE0671ECBAB3BA2D89FDD - 2ED79C8B7241B2BFB45E139D63B76B7FB5F02DFBFBA9F20FE02A5FD8FF08E02D - 4A5F16EA9F4DAA32FE6CE397B53FB395FE0FAE915C78 + 4C69020000004C7A140000001800000018000000770E00000000000078DAED5D + 7DB05645195FB2EC8B9AB2A9A6A6308B26F9C306D332CB6C40C72CB2A669A22F + 29FFC9B02CB5D4A20FA322871CD019CB69C821CB04EE3DEFBDA8A1382546E1A5 + 0011B9F7BD1710B82234C275E22304062E70EFEDF9ED79F665399C8FDD3D7B2E + F785FDE399F7DEB37B7EBBE7D9679F7D76F7D967878686C4D070D274F1B2EE48 + 0CBA10BD3EAA083F8AC419947788E8B17AABF89109212FDE41DD4CF1EB91B8C5 + F49BBB6BE25657FC9E489C994765F199579954169FF87B7B1E9D2EFCA1F45EFD + 3D17FE68D49B828FE71D94F7D7AEF2D9DD2ADFED50DF95C4A7FA4C2F2BFFC0D0 + F1A98D9E2BE2B12B69D88BE9DB7EE09580A9CAA2EFF3AD278F6BF3D3189FE46C + 0AEB7FD5AE9B7CE2AF5F20DE45723283306682E8EF6B869D3F15CA67D5FD6B68 + B8ED879345A4BBE87BEF07998C23B644B86334BE8E29872746910C7C1DB68DAA + 2BE45CE1E36FF54DD2FEA1BC26B615A86B9E78A3B29740EB5AC407B2F091A6CB + F8330F8A3714F0E02CEAEF4F37F850137331DE64E1230D7934BEAD46FD327912 + 89459CF7307DF397937AE004FEA87AD5C457E53B71FAC369BC82DED0EAF19534 + 3D9385CF76C0D59ABEF99A9EB67A8E7885EAC754973F67E9B13C7CD639F395FD + B074A97879A3EC9AB882EB7DB4AB5DBCDB15BFDE22DE43E903522E5AC5E59AED + F01BB619FE99A7878BF019EB49B655EED29E2DE5FACFC8C45F28DE44798E80F0 + 778E5E9EC9757D5CC35FCFBCFF669EFCD2375F0A2A18CFAEE3EFECD1F07BB8CC + EB4A8F2BADE2DB8CDFADE12F61FEDC51169FE4741663FD2DF98CEAFFEFD2F884 + C1B6E6AC86CE89C4C7F99B06BBDAC4B9CED82D629CB2258E6BA7784EBA91CB78 + C899F791F80B633C9BD411D42E9F6FF46F6A2307BE7F579B3B7CAEA07F0F20BF + 05CF6F50FD96DE7B202BDFEA45E235946799568F47490EC667EAF33671BE3E56 + 50DE7FFC2B12AFCEAB0BD2B5EF50B486EA7537F5BFEF83F0379E25F2CCDB729F + 7895F1785B139FA5773A0DEC9CB5D45E579518D72F218C9F8357F4BB8A68253D + 7B04CF08F7A3A78DFD14C8AEBFB789F7533FB811365115F8247F3B5817DD9B59 + 8705E29D946736E599E080AFFACFA2B4F4CE489C4369CF739E5D3EF113D8D2F6 + F4850FDB3C31A7EAD8F0B0789D0F7C5FD869F83EB1D3F075BB1D63049535BAA4 + 7C0E2B7ED5FCA9BA7D87433E87A37F79D40F95EAB7AAF573A040814E0EC9B588 + 9AB8B3682EEF381F184B3AE73FACD77654885D6A2E9BB13EB3C5E718DCECD86C + 97D435EC273047F63A0FA818BF6AFE9C4A6554D9BF86433F0C877E0B142850F3 + 1074007441DE9E8B977526D269D06D15E03FA4E963EF65F09AF792508671194F + 686574360B7E95FC6956ECE1E85F55EB87AAF55BA040814E0E61ED156BB0588B + 75F0939880B55FAC01E7E4B9D7751E86356B7EF779AC6567E459A4FB115BE22F + D6F4726A1965F0795CF9BB56C636F8F7F8C23729A32C7E51193EF0590E47EB7E + 11444F350B7E0A7FB62A1FB00ADA77ABEE5FE6593EB7267DD74672FFAA5C3F54 + ACDFAAD6CF814EE9717B744F4D7C87E72DDBD9B716BF4BF0BCCCBA2DC9DB9708 + E745E9CF5713BFA8D7C4A7BB2271317E49DE7F89F303447DF55631D9C1070F67 + C50EC17F4FF79FD509CFF9DB0ED1EF348B75FE2F32F684349FB88CFE8D32BE60 + 387EBC98E67728FB68240EA6ED63B3CFE18ECEFBC56B0B7CE9F0BD1BD378B261 + 81783B740C7ED37845699B8BFC21A59C505BA6A5E5E1F3F7CDD07D55B3E6A090 + 0FF5FF9A48BC19638924921DE0E3573D43BA86FF194A7FA100BF9FF03FD2F06F + 247E17F81C1E546D8EF7F07E01FEF62AEB0F5F68F41D27FED7C4AF28FDAF05F2 + 793DFAA5ADFCC02F5E9EABAB896F19C87F1FE4D44AFE63BFD8ED45F2CF7D65B2 + 65FFFD86F4D38DC47A6A9B0B0C7D56A7A10CF4CB2CFD039EE8FEBC4C7BBA5BC4 + 070D75DC645E93D92CDBAE555C2565907EB92D374B79639F789732C04FF479F4 + 4BC81EE41BBFF27F6A4BA4832712D3B10CA3B5A1F87CCAAEC499A6FFF5B4898B + 9AA90CF0248557BBB2FAA4AF325CC650833214AF76FAAC7FA33DDAC5DB506FFC + 06FBA739EC9F9CF94D69FBC7E0CC4529FB278F7CD83F06DF5ECEFE49A1A6B27F + 3CD43FCFFE3118B34BD93FB96B201EEC1F837341A5ED9F8CFE1BEC9F60FF04FB + 6784DA3F69EBFD39677EB7B9F8FFD7DBC485067EF6173AAEAF7AC7C7777A889B + B02D8F97E8F7DCF787D646628AFA3F8BD6C6F13186D4FF266DD6ACFC0FF8013F + E007FC93855FB57EAE7A7C39C5DAD7BB7D82399225AF3B6CD66AD866BCBA4866 + 947CD15C60A3CD3906539EABBC9D9198085F02D333A2B6F8C88B983F5CC6F2A2 + 3274FCBC787BC9BC5C06622B2CDFF48078BD377CADADBADBC5049A07AEA779DB + 2A4FFCE92BAA4399FABBF4359BFA97C5B7D56BA1FEA1FEA1FEA74FFD9B963F86 + E37B1AA918701EED9334EA0B3E48CE6715ACF88F7D832AEC4335A790B1A92AB0 + 0F959C73AC47EFF6A1DE8F5CED439B7EEA621FDAEA012D76E5B2B2F8D4C6E715 + E9BAB2FA0D6564C9D548185F86039FD7DB5F48F391E5D830DBF5FD16ABF1EBD8 + 7EC1EC9CBDA6DBF5BD101B7C92B5A3167AE8A8357EBCF77D98EA775BCE7885FD + B8C3342FBAD985FF3CDEF5E7F0FF30F294919F3CFFE764DA0890CF6DA6EBF73E + F7620239AFC575B8FAEAE86B89BED67F6CD7E76CD77F123E8D67F95EFFD1C6D2 + 2B596FDD61D2174DC7770DFB20E3F7937EB9D9C4163359FF69F8D21026C70B86 + 5FD081341DE4B2FEA3FB92AAEF2F8AA75A62AFD35AD705FC80DFECF8AAAF2AFC + 3CFBC1059FFD3C67CBF955ABF86996FDE38CAFFBA9D4C411DD7EF2C57F94019B + 9274E9F7AA6ADF2AECABE1C42F1ADF5DD67F3CED15F685FDAF91BFFF655317DF + EB1BCDB0FF752AAC3FD812DA96FAC44FAAC22F23FFEB5AC5A75806FB0B7446BF + 8C815F139F34C5A7B16692F4F58FC46DF0C5CDD5A1944ED83F4339C932B2F0D1 + 3F81DD789675BF8FF69CEF315B69887F48C5FA97F16822B1775D9B78EF09716A + B4E7C88FF70CF18FAD3BD5C49DCADF448D43A9CF5364D5047F28BE476748F9B2 + C8BFE5B9FB63CF7DE1CB75CAC699FE6AF08FADB7F8C7F7C89F43FA5D11F01156 + 729288A7B0CB517E56A1CFD8C8BFBCBF22122B0AC7F736712EFA61773CD79E6E + D27F19BB1F73758331E325C482E032564A5EE5EB9F43F28E9956F189143EF45A + DE7FB6C6D6FEE13B1A6716521CBB1C67189EB4B27F88C716795BF9ECD97263FB + C70E7F3ADF7B73D8D8FEB1C46759372AC31A3F3EF723EFD3C3BD38680FB4B927 + FC5E27FBC7103F63BF617AC00FF8013FE007FC8AF0B531C396E4BBF9F8BD1EFC + 7F7AC3FE9ED59CD707CF21174FA7D9715636A183AD5856E68B6C458FF8A9B6A2 + 4FFC345BD11B7E8AAD48F48C27FC5C192C8B9FA7EB027EC03FEDF14B8CE94563 + 3DC71318AA88368731BCF9086B7A247F53E14782B82688695118532212E714ED + F5926D7026DFC53D9090932D45F118B03E8EBB930B627ADCC3F72BCFC63D84B8 + 8F97FD6D36C2CF31CFB7ADC8B656778BEBF74237BEBD5DBC036BE794F60767FC + 38B611D6F4C6648CC135A2DDCEF8915818A79F78773CF377613DBF7E45F50FE9 + 213DA48FD0744A6BAF5BF6FF75EDE26C75DFBD8E2F63AC4562A28EA5F417DEC9 + 28BFAD9ED05FF4EC3EA27DD87B54F81C53AA1D7A5CBF330363128F1BB3337CB5 + F7F6D4C4DCE3F4F242F116BEBFEE008D0D7F62FD0A3D3898763F3DCD657FABC6 + 0F940DDF46DED741CCBA3DC9F8DEB2ECF9E2AD94D6C3733A8C65835971AE30FE + F1DDF103897D9CE7883E94D9B654463D8EA987BCD79B8CC594EF5A79577D2426 + 99C4F5EA9A47FC2D88E315289BE49D768EB638B5554B4FAB9896265FDAF83D85 + 65B38C3D3E0019871C5610D7E96CF62B44DFBABBB2F5B0D88F60202B66BDA7EF + 403FBBB60A7C197B2D9ED3DD52496CCF585F017F92F73969AC6737415F65E914 + C830E2E491BDDC6221FF11DBB77BA167D374A19C3BC4FA79C051F677637CC8EA + 633C2F81ECCECA1AC3CACCA7B2C62E4F6B0553659B5BF80A5BF6B95B816FE3EB + 9FEC53981B611C4BAD3F62C3C67DEE4A27FE928D023B02E3705A19B029F84EFA + 8D98AB39F120F66779897036A4C5AEC3FC15734C96E19A9469DBB1A045CC613F + 95BEB4B92A9E818F90E5D26B3396B1684D62812ADBCA36CEA7619CDAF62AB059 + B74CCCB209FD90189537B6BBECF5101F061167D4769FC064AF87F8D0D128AB26 + 6E74D9E7305CDB9CC7FDFE87AEF8182BB27C3E3B1788CB6CCA48C3E7FD1AF07B + AEC6A3A718F39A281267989691878F18D9F4FE6A10CD877EAFF035F9AFF1B87E + 830BFEDA984F186723B2357F9727578EF53F4F3D7B76BEB884EBFAE8717215C5 + 72E5843F5FDE23B104FCE133260DFE94D97F57F89DA4BF794DBC8D63C67AC5D7 + F9C377857BC5976785E2FA2F5BCF776E78AEFF058CFF58CF027151B3F107F2A3 + FA5755F2C36354D48CF2C3FD6B7995FC21BC47AAE20FFDDED5B0A3D827C1073E + D5F5C3F4FC48DA5C9AF4F4E5C1FFC79FFF4FB07FFCE2DBD8262EF8F8BBACFD63 + 22E765EC9F9CBD442FF64FD65A20EEBD3841AE2CEC1FD821DC1F0A89701FB4D5 + 3F88EF4ED44D34278FE83BBA30AF75C157EB8034373E3F79CE8230C7ABF5BCB2 + F8F4F7FEB47319BEF049262E83AED749DD33E1033FC19B8B814F657ECC237FD2 + 647DBB2FFC246F982E2D89FF5F3E4BB3BB80104B638F2D3EDF7932C78494CE09 + FEC9C1FF79A4D83FE1FC5738FF55D9F9AF8CF397A5FB6F247EACF6F82BC1C7D9 + CD9AF86319FEC89893ADE226D846F516318ED7DDC7E17FC41B417A197CBE030F + 7B042BD0BEFC1EEEE15B219FE7DCB366883F41C67C8AFDD5945DB48FFF3F9077 + 3F5616BEE409D50BEFAA7D68F084F831966DB9B1CCA341998E3A50FE24AFB2F0 + 99DF7B65FDE275F8A96ACF4F9EDFE5FD6ADEE71AE47C7BF19E117E6CE7AE907E + 8DDCA6BC4FAAEE3ADAA5CEE3229DF7EBD01EDD26F8FCED68C3FD7877D362F14A + 60623E84FD5E96FB9DF27B62ECFD687B551793F6E5391074FEF8CE48BC4FDE49 + CBBA469D23C073A4E3EFB4FDD9BCFAF3D8775CFD516F891DC70972AE7F2AFF63 + BFCC9DEAAE29EABB57A4F0BFA78CFC40CF407E94BE49CA4F327ED0C992FF9CFE + BB8FF9B3DFB8FF66DB3F37C11F567E07EB1FC82CEBE5C71BFA27E79EC102FBE4 + 20CEFEE39BC1D734FD893A2479F27FEC66B8014C7A1400000020000000200000 + 00D81000000000000078DAED5D6B901D45153E4110055488A08048A18582FEB1 + 404B404050512C4B2D8BA73C94B728A5803C8256A1C41F460412C107B0601940 + 92EC9DBB49C448B04AAC881B30401EEE3B5B08840D09529B4AAC44483671B39E + 6F6ECFA6EFECCCDC9E99EE99BB7BCF8F53B9D9E999EF4CF779F6E3CCD8D8188D + 094DA05E8FC66CD264C5B7D58F53013F4B5F4F257C19FFA93BFEDCA6D386DD30 + B4639DA6F6CE951D6FD4DFAEE4AFD9F0E3C6BD202A13DBAA9CE5954BC117FCA9 + 841FA3DB9DAD823FD9C6BF457D40A7E4BAD9A8CFA3037A2AF44B107E178DCFB8 + D706E388DF25E0CFD4F0673AD3D32A7DB3C7A3C7FB2BF435537CB4C53DB8372B + EEE07C3A989FB158D395CDA6F8681B5C63D95834B088DE9D52B60EE57BFB745D + 655EFE628A8FB6213DEFC5330DB1A773FB41EDDEDD7D55BAE7198FDE6E8A8FB6 + B807F76AFDB0B67B1E1D948C4FD3B8ED1F34EC91DE0A9D9D55FE18F31CBEBE53 + 1F8B4499F6E80AFDBD7BAA74565EF9573CE8FD706954BB1796D2BE7C7D487BE6 + 5DB6F48FFBF017DA7BAD631EDE1AA167576A6D3686C73B0FFECA25B41FB77B4D + 93E52B22FCF193E3F855BADEB6FDE13EF87E9C2E2999DFA5C6E77F3DF3E9BDB6 + F1FB17D261DC7654DDB373CD623A50B3579FD6FAFE59233DADD26DE332C5BF8D + 6CB647AB34393C45EB9BAB34FCB986F89F435FF9C4BF0D7DC6A35A9F5DAEC9DE + 0C0DFF67A676B2BB838E0519FB920AFD5CC3BF49E3EB264DF66E77E833EF8A92 + 71EEBFAB35BE7EE7CC9756E8E1717C1E734DFE4FD1746395C3987B4D80D3EDD1 + 49E3F6C1A37769BAB1CB44FF32C46B87063A0EAC171EA5778678FB6B1AFB931A + BF4A376A32FE64846C5CAE5DDFD0F508ED6F3356854DD7C6FE92181BBD5EB30F + 7738917B8F5E89F32D88D774FF1BE7FB53629FA7FB5FFEFFC5B1ED67D25EDC66 + 89C6C30EDC9F19DBA3F3FD1866CFF31E438C93E82B6BBAA0C75FD08BD9181F53 + 5CC88EF2F9A3DA7306C2321F7BFF423A02316328861CE2F7B9197171DC7DAB3D + 3A44D9F2F5FABD2C4BDD6B17D0E169FA0EB122DFBB3422671DF5ED48951E629D + BAD3972DFEAD6CCB68B83D63FF49F7B519C6F01B75BA634E1B99BF8B2CE9EF5B + 551EF454489EC234C26DFF069EA3623C1B04D982BF870D814DF3ED1AF3C6789F + 4D23A3424242CD4F2A2ED9C2B49A75FCC812E669B7A48949E0E3D8363D88788E + 6DD3A996E789DB0C7CF7B3BACF2C0A3F02BB30FC18ECED9CD79EE11A5F61AF08 + B5DBD153A52F3B5827682B123B09BF08EC387C5FC722C69BF5EE4CC7EB346D2A + 4FB8B508EC66C52FBBFF13E46FA408F92B92878CF667A408FBD30CF6B719FC8F + 63FF5B6AFC5176FC252424242424D4D4E7556AEBBB7FEFF1E8BAC2F70255E9CE + BA38A59D3E561A7681F891D80ED74F4371D1AC88F9EFD982ED74CFDB1D13D657 + 58060AD16F96E9B2B09B01BFECFED774FEA7113A3F4778288587D2EC6F33F89F + 66F0BFCD107F0809090909094DE9BD08EC5BE163390EBEA170FF1E8AFF8B8EBB + 25FF90D87F32E41F36F70D4F86FCA3D9E6DF8AEA7F997F93F9B732E7DF8AF63B + 65C71F4242424242424D5E17E348EC55C39E35FD8C6F8E18F7547F2F9D47BFC5 + FEBE9431D2160BFBFF86F4B3D98D78C01E45CBF5DB86427157220FB6F139E6F9 + BCBFB7D89007DBF83E0F55FA028FEB9BA17A18AB706EBF08FC343CB8C237E5C1 + 25BE5AE73A334A1E82B3A5AEF16379A8D2ADAD805F66FF43FEC2D845C99F09B6 + 4BFB63823D15ED6FD9FEA76CFF5B76FC5176FC2524245436D1B4FE763A1EF524 + FC7D464CF88DBF35AA2792B7660ED3DDA84793507362036A8DD8ADD943D3541D + 91FFAADA2D9DA8D1843A5941CDA76E8F4E433D12BEB65CF1B1AD56D3295F7FF8 + B5EB3C6A57CF7C9AFBF84483F8E053E367002BB4E0E5B9F4B61CEF3D3F38EBB6 + B28DF631BD77D932DA1B7BFFD4BDD52CFDA0D5E1FA550E99B957CDCFDF98A13E + D336F439DE2521FEFD1128F60C20F7991A8B6D696452C9F9EE46E3CDED56821A + C4E827A75B8FF5EB1E6E30A9C76A82AFE2A0A7B9DDAB2672D0D3419F08D744CB + 8DAF64A966A31AC65817A99A60A759C3AFD067943E5E60B0A6E7D77FEBEFA00F + 85652DC00B88DBBD019AF0F7904C7679748CA91E04B5C1708F2D7CD848B51E7C + 83415F5DE08F7F954EB7D5FF7E8DA05A9E747EC35A4F1E7D5CB5BDD9B6FCF575 + D07129F46FB9B5F7F7E819D4C132B5C3418D4EF892BCF8413DBF463544EB7480 + 6DA56F333DFA4792DF31B4BFCF316DED5A44EF49B9B67E93D2D9DFE4C817E706 + 3E302A3F3790837959FD6F77851E089F7F0FDB944684D8013184BA7F452379D0 + C6FBB9A8F80C3E202D0FE8073516DBD47396FBFAC4363588BF7CFB5AA15B949C + A3CD56A60E7B3C2899641F1AAE2717225C9B0D5953755C876CF210F407EC886F + 2755FC8DDF35DB52AFDFC000560CAFAFF5B4D3475CE70BC283110F43E9ED8365 + 1EAA744D11F9632C0F05E1073C8474735D11FD1FB293D3D9BF7D075434B6E4FF + 92FF4BFE9F3FFF6F44AEF37FC358DE59FE9F220E7692FFA79525DBF97F8A3170 + 92FFC75151F9BF29BEABFC3FC5BA9993FC3FADFCD9CEFF53D81327F9BF21B6B3 + FCDFD0FE4AFE2FF9BFE4FF927B4BFE2FF9FFA4CDFFF11D8EB4794C445C3798C3 + 9735AC796AB2176A32E1E33B250EBF7739601883B469FBC8FAB5FFA7A5FEA00F + 4169F3AB561C7FC1177CC1177CC1177CC1177CC16F2DFCB2E3EFB2F30F91BF72 + F3EFD0B737D3D24EFDBBBA39FABC3F87ACE37BED57173DE69ABE3EEBF3E0D177 + CBC0D7BEC7938987BCF8FE1A88CE4395BE9707BF91CCC5E91A78C05A8EFF1DFB + 0A5D5B347E561E6CE2877930198BACE3CFEF777F235E7BAAB4CB157E5F079D60 + 621F5CF5BF2D5F90D7E74C35FCBC3187F4BFF4BFF4BFF4BFF4BFF4BFE08BFC39 + CC3FDB2CC59F830EE75F066DF7ABD0D42299FF91F99F669AFFC96ADF6DCDFFE4 + F12F36E67FF2FA3799FFC937FFD3EAF177B3E0B32D3B9AFFFE72D2790E5C536D + 8EB689AFB0D7A3F624CEE0C5EEF1E46BAA3EE5FA300F59F10716D051EA9DDE34 + F99E3D7850E706EB78C8917FECCC1C0F5468675EFCBE3DE70A077B6BE70B92E3 + 00B4A9D46218DC9B7FFCFDB300F707671B3D8FDE127BFF4CDAABB74A0FA967CC + C5FFADC83F9E1B9CEBA8D20C83F38B75D856F49F9FC7FEE387B0B34936186DC2 + D862FF52E1E75AF375B5175BA865F3C18122F3BF06FB619CE77F79F53B6FFE97 + 173F6FFE67C3BEE5C9FF74424D677EC62BECD71E282AFFD3B183B37D7CFF58A3 + EFDADACAFF42D8BB954CFDDB7F46020FB6F23F5FE73C7A2AC053DFF39A1BF0C3 + EF71B1CBFC4F3DEB51A66FEBFE58C982C7EF70AECBFCCF553C90752F98E00BBE + E00BBEE017879FC5FF58C5CFE07F6DE267893F6C8F7FDAF8CB85FC8107C646FC + F96059F25FF4FC83E067CE3FDB1CC59F0345AEFFCBFAAFACFFCAFAAFACFFCAFA + AFACBF5A5E7F3817B53DCBC2B7A5FF88BF61DBC2DF213421DC035D44BDC72CF8 + C118A296117294B43E52DDB341C5D4F7A7C157EF8D7A8EBF7F6129ED9B794E97 + EF1DAF3117519B320E5FF5F9AB79B0EB6ACC79B411F9458AFD076FA2FF22EAC4 + CDE2F64F26D4918BBCAEFAE08D14EF3FE1EFA86F98740E29E97A9C3D4883EF7F + 0BC1A3D7E2F093AEDBC037B16B09384EF0D5374A9E2F0B1FD88841CBC22FBBFF + A7EAF847DB1F7FCFC795BA7D9930FEA1EB59ED8F8A213764AFED5D5F635CD985 + A78DDF5FD548461FE4E1C1C70E6A8C57E9EB26F927639EA778B84F5DDFA8FA2F + 6D8E3A4FDD0B1F7E6F8AFC7B9E260717C26F65893FD4B7939647BDB786DF9923 + FF1F0DE64D73C65F7968779EBA8E59BF9B5A879F63DD3B377E85AECAC3435E7C + E5F733F360033F0F0FB6F0B3F260135FD9FF6B021E50F7B300F94FB40F0EF13B + D39C87B38D6FEBB9822FF8822FF8822FF8822FF8825F0EBE2BB215C766A44EDB + FD2A34E9CF77B894B786F341AEF5ADD17C906B7BD328FF778EDF600EA2087B9B + C44351F63E8E8722FD4D140F45FBBBF07C5001F29F681F1CE277DAF4CBAEFB47 + F0055FF0055FF00BC7DF5D400C1A1F9BBA8DBF251F14127248FE7E468EA9D5FE + 982D20FC466C9D65AFA2DA37BFC2684FAD474732CEAAD8FDD67C0D6D5CCC93A9 + 3D3C6BD45E96B53D553A6BCD623A1084DFF89B7AD66AB4B58D8FFDF4AA6D1FCE + 6945ED7B0FF67CBB58FFEFABF8FBBC905F7F25617CBEAA9EF7BC83794A3F778A + 7AF750FD04A3757757F3B419EAE40BBEE00BBEE00BBEE0A76ED7F508ED0F8A6B + 17BE6E1B9FFFF62FD45EEC5940EF0FB7C3DF700D6D1A3D37A9CE20AE25E03FA1 + AE75AD7D8CDE11B453BFBBD4FF9F88C5AFD026B4C1F7CAE3DA0CB4D38755EC33 + 1C7966DEA31E85F3672D1EFD63F00DB8EE79745042CCF4886A373BA1CEE11C85 + FF70D4F5EE85F441BEFE7A444CFC3AAE258D6B7F3B1DCFED76C5AD5DA93973C4 + 5EBBFA3AE8B8B8E7747B7412B7D9AE616FC7DF8C74A04AD76BF775719FDCADA8 + 5B8BEDAF338891CF1B6FAFF6B0A73AAFA7CE8A856803F3718EF1732A340B9425 + B75AB68CF666AC2FE25DFD5A18153A137F93BC5348C8C99CE80AEB738CEC4F60 + D3936CA553FC3DB40B76B5C8FE849F861F852F0BF2F5ACF583F2127C5960BFCB + B2A141FC019B5E063E7CA8A9EF9C8AF8E3F11FFBD156903FE89F1FABD6E2C551 + 257BE7349AD7C4DCA23FBF57D9B33FC186FD6934EE98AB0DE6542DDADF6113FB + 8BB96A6D2EB91FF39A49738BD665B3B62FC59F4B2E123774BE15354ACE2A4937 + B1763086F9F3C98E8FFC9AC7F125E49949B95E48F69FB1D5FFC05779B62FCB8D + 723E2DAFF3E50F6B07797958BB800ED7F46913FBFD53D3E81FD60EF2EA013FE3 + 007ED612F5CC1D49754734FBB3DAE59A73A35C10F617EB35FE3976BBF6D708DF + B2BFAFEF7F8F2E2C0AFB9F1EBD4F1BCB86F26793B2E89F6DFCB4F64748CEFFCB + F9FF647CD6A953540D89D8FEEFAFD0975C9DFF1FAF879B5463AE42335D9DFF0F + F091C7E1FF8895605F543DA93A7C17E7FF757C6DFFC398AAB33401DFF6F97F1D + 5FD595D98C39759371B171FE3FDCFFA1FB5E717DFE3F0E1FE38F7E8FEA7F9BEB + 6549E35F34BE36FE9BF9FF3F281A3F627EA1A5F099BEA5E9FCAC12E4EFE260FC + 81D98AE3BFB28DF609EC7F2BEB3FFFFDE656D57FE41A62FF5BCBFE9BC49F4EF0 + AB743A5F1B499A63C6BC919CFF97F3FF59CF7B48FE2FF9BFD4FF93FA7F52FF6F + CF7A04E6AFB3D0CA25B45F5EFF17AC8B65A4E7F3E207F56A99D631BD6848EBD4 + 3DC3B6F0FB17D261A6B230389F0E7685AFF67044D7F7ADD29C02F0FF9330DE9B + 5DE3B34DBB04730F3174A96BFCB2C73F186B7ED7767C0FAE8EAAF4EB02F093BE + 2FF15201F2E78F35FB92F3B1974D27CCFDBBC247DF32DD6E42CCCB3D16F15FCC + 617F87F2E2F7B7D389AC73B764A49325FF137CC197FC5FF27FC9FF25FF97FC5F + F2FF96F57F9D86F63F35BE5FF3A3B636D2DBE5D10742FB4907B126B2DAA3435C + C83FF60BEBE72C19739186BF481BFB1DAC8F67DBC6F7E3F35A7E3227F83E10FF + 7B2328F8CE4F705E156D6DE3E32C05B7DFCAFDBF98B1A663AFA7F6CED8FB3F1D + D7D0C6E4DC85093EFA1CEF82E721D7C377F96AB9164DE3DF1FE53CF00C107EE3 + 6F8A8F57D116F7E0DEB87DDE8DF0556E198CF756853D1ACC3DC4EC5BBB54B541 + DBADC1795C3C2B2D3E8FE58C60BC55BF0EF3585FA69FFB0DF643E8E3AD7818F6 + EF51F28075F3D4F81EF5057285B10D5DFB49A89E19FCCE6DA1BE98AE7DC7AA37 + 2DFEC0023A4AD3AB61D6F763B4F3CEF0318F772DA42340FCFFA53E0F1D7482DF + A6838E0DE413CFC0B332DB49350E5813D5D77F813B2EA7B5F3F663411FA8F553 + 8CDD8CDC763A063F38F7AFD93FABF8A1FEDF843ED5EC10C67E297850EFFE8492 + FB4FFA7B1578AC306679FA1F32A3DEE9BEB0FCE13D27C89F473F9E207FB089AA + 76535A7CE8CC04FDD3741FB2063E7C5272A778BB2CAC7F51E3D0ECF6A76CFB6B + E07F86B5F1DFE4C2FFC4FA5F255775FE17B62E83FF35A011B5D7F96C3FB6681C + 7F6C3739DB9422FF1EA99B6FADD9A33E5DA7F11BFA0A9D899235D0FF01A292AB + 6C } end object ActionList: TActionList @@ -487,114 +608,139 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Left = 408 Top = 56 object acPrint: TAction - Caption = 'Print' - Hint = 'Print' ImageIndex = 0 OnExecute = acPrintExecute end object acClose: TAction - Caption = 'Close' - Hint = 'Close' ImageIndex = 1 OnExecute = acCloseExecute end object acFirstPage: TAction - Caption = 'First' - Hint = 'Show first page' ImageIndex = 2 OnExecute = acFirstPageExecute end object acPrevPage: TAction - Caption = 'Previous' - Hint = 'Show previous page' ImageIndex = 3 OnExecute = acPrevPageExecute end object acNextPage: TAction - Caption = 'Next' - Hint = 'Show next page' ImageIndex = 4 OnExecute = acNextPageExecute end object acLastPage: TAction - Caption = 'Last' - Hint = 'Show last page' ImageIndex = 5 OnExecute = acLastPageExecute end object acZoomIn: TAction - Caption = 'Zoom in' - Hint = 'Zoom in' ImageIndex = 6 OnExecute = acZoomInZoomOutExecute end object acZoomOut: TAction - Caption = 'Zoom out' - Hint = 'Zoom out' ImageIndex = 7 OnExecute = acZoomInZoomOutExecute end object acZoomToFitWidth: TAction - Caption = 'Fit width' - Hint = 'Zoom to fit width' ImageIndex = 10 OnExecute = acZoomToFitWidthExecute end object acZoomToFitHeight: TAction - Caption = 'Fit height' - Hint = 'Zoom to fit page height' ImageIndex = 11 OnExecute = acZoomToFitHeightExecute end object acZoom100: TAction - Caption = '100%' - Hint = 'Original size' ImageIndex = 12 OnExecute = acZoom100Execute end object acPageMargins: TAction - Caption = 'Margins' - Hint = 'Page margins' ImageIndex = 8 OnExecute = acPageMarginsExecute end object acHeaderFooter: TAction - Caption = 'Header/footer...' - Hint = 'Header/footer configuration' ImageIndex = 9 OnExecute = acHeaderFooterExecute end object acPortrait: TAction AutoCheck = True - Caption = 'Portrait' GroupIndex = 1 - Hint = 'Portrait page orientation' ImageIndex = 13 OnExecute = acPortraitExecute end object acLandscape: TAction AutoCheck = True - Caption = 'Landscape' GroupIndex = 1 - Hint = 'Landscape page orientation' ImageIndex = 14 OnExecute = acLandscapeExecute end object acPrintColsFirst: TAction AutoCheck = True - Caption = 'Columns first' GroupIndex = 2 - Hint = 'First print columns from top to bottom,'#13#10'then print from left to right' ImageIndex = 15 OnExecute = acPrintColsFirstExecute end object acPrintRowsFirst: TAction AutoCheck = True - Caption = 'Rows first' GroupIndex = 2 - Hint = 'First print rows from left to right,'#13#10'then print from top to bottom' ImageIndex = 16 OnExecute = acPrintRowsFirstExecute end + object acCenterHor: TAction + AutoCheck = True + ImageIndex = 17 + OnExecute = acCenterHorExecute + end + object acCenterVert: TAction + AutoCheck = True + ImageIndex = 18 + OnExecute = acCenterVertExecute + end + end + object PageSetupPopup: TPopupMenu + Images = ToolbarImages + Left = 512 + Top = 56 + object mnuPortrait: TMenuItem + Action = acPortrait + AutoCheck = True + end + object mnuLandscape: TMenuItem + Action = acLandscape + AutoCheck = True + end + object mnuSeparator1: TMenuItem + Caption = '-' + end + object mnuHeaderFooter: TMenuItem + Action = acHeaderFooter + end + object mnuPageMargins: TMenuItem + Action = acPageMargins + ShowAlwaysCheckable = True + end + object mnuSeparator2: TMenuItem + Caption = '-' + end + object mnuPrintColsFirst: TMenuItem + Action = acPrintColsFirst + AutoCheck = True + GroupIndex = 20 + ShowAlwaysCheckable = True + end + object mnuPrintRowsFirst: TMenuItem + Action = acPrintRowsFirst + AutoCheck = True + GroupIndex = 20 + ShowAlwaysCheckable = True + end + object mnuSeparator3: TMenuItem + Caption = '-' + end + object mnuCenterHor: TMenuItem + Action = acCenterHor + AutoCheck = True + end + object mnuCenterVert: TMenuItem + Action = acCenterVert + AutoCheck = True + end end end diff --git a/components/gridprinter/source/gridprnpreviewform.lrj b/components/gridprinter/source/gridprnpreviewform.lrj index 18917e5fb..f1daaf7be 100644 --- a/components/gridprinter/source/gridprnpreviewform.lrj +++ b/components/gridprinter/source/gridprnpreviewform.lrj @@ -4,41 +4,10 @@ {"hash":13109985,"name":"tgridprintpreviewform.tbdivider1.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,49],"value":"tbDivider1"}, {"hash":13109986,"name":"tgridprintpreviewform.tbdivider2.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,50],"value":"tbDivider2"}, {"hash":13109987,"name":"tgridprintpreviewform.tbdivider3.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,51],"value":"tbDivider3"}, -{"hash":14901026,"name":"tgridprintpreviewform.edpagenumber.text","sourcebytes":[101,100,80,97,103,101,78,117,109,98,101,114],"value":"edPageNumber"}, {"hash":13109988,"name":"tgridprintpreviewform.tbdivider4.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,52],"value":"tbDivider4"}, {"hash":13109989,"name":"tgridprintpreviewform.tbdivider5.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,53],"value":"tbDivider5"}, -{"hash":5738580,"name":"tgridprintpreviewform.acprint.caption","sourcebytes":[80,114,105,110,116],"value":"Print"}, -{"hash":5738580,"name":"tgridprintpreviewform.acprint.hint","sourcebytes":[80,114,105,110,116],"value":"Print"}, -{"hash":4863637,"name":"tgridprintpreviewform.acclose.caption","sourcebytes":[67,108,111,115,101],"value":"Close"}, -{"hash":4863637,"name":"tgridprintpreviewform.acclose.hint","sourcebytes":[67,108,111,115,101],"value":"Close"}, -{"hash":5048740,"name":"tgridprintpreviewform.acfirstpage.caption","sourcebytes":[70,105,114,115,116],"value":"First"}, -{"hash":217173685,"name":"tgridprintpreviewform.acfirstpage.hint","sourcebytes":[83,104,111,119,32,102,105,114,115,116,32,112,97,103,101],"value":"Show first page"}, -{"hash":147653555,"name":"tgridprintpreviewform.acprevpage.caption","sourcebytes":[80,114,101,118,105,111,117,115],"value":"Previous"}, -{"hash":239386821,"name":"tgridprintpreviewform.acprevpage.hint","sourcebytes":[83,104,111,119,32,112,114,101,118,105,111,117,115,32,112,97,103,101],"value":"Show previous page"}, -{"hash":347380,"name":"tgridprintpreviewform.acnextpage.caption","sourcebytes":[78,101,120,116],"value":"Next"}, -{"hash":923269,"name":"tgridprintpreviewform.acnextpage.hint","sourcebytes":[83,104,111,119,32,110,101,120,116,32,112,97,103,101],"value":"Show next page"}, -{"hash":338084,"name":"tgridprintpreviewform.aclastpage.caption","sourcebytes":[76,97,115,116],"value":"Last"}, -{"hash":84807877,"name":"tgridprintpreviewform.aclastpage.hint","sourcebytes":[83,104,111,119,32,108,97,115,116,32,112,97,103,101],"value":"Show last page"}, -{"hash":23459486,"name":"tgridprintpreviewform.aczoomin.caption","sourcebytes":[90,111,111,109,32,105,110],"value":"Zoom in"}, -{"hash":23459486,"name":"tgridprintpreviewform.aczoomin.hint","sourcebytes":[90,111,111,109,32,105,110],"value":"Zoom in"}, -{"hash":106918100,"name":"tgridprintpreviewform.aczoomout.caption","sourcebytes":[90,111,111,109,32,111,117,116],"value":"Zoom out"}, -{"hash":106918100,"name":"tgridprintpreviewform.aczoomout.hint","sourcebytes":[90,111,111,109,32,111,117,116],"value":"Zoom out"}, -{"hash":108902056,"name":"tgridprintpreviewform.aczoomtofitwidth.caption","sourcebytes":[70,105,116,32,119,105,100,116,104],"value":"Fit width"}, -{"hash":28176728,"name":"tgridprintpreviewform.aczoomtofitwidth.hint","sourcebytes":[90,111,111,109,32,116,111,32,102,105,116,32,119,105,100,116,104],"value":"Zoom to fit width"}, -{"hash":116338068,"name":"tgridprintpreviewform.aczoomtofitheight.caption","sourcebytes":[70,105,116,32,104,101,105,103,104,116],"value":"Fit height"}, -{"hash":122522228,"name":"tgridprintpreviewform.aczoomtofitheight.hint","sourcebytes":[90,111,111,109,32,116,111,32,102,105,116,32,112,97,103,101,32,104,101,105,103,104,116],"value":"Zoom to fit page height"}, -{"hash":213797,"name":"tgridprintpreviewform.aczoom100.caption","sourcebytes":[49,48,48,37],"value":"100%"}, -{"hash":23626005,"name":"tgridprintpreviewform.aczoom100.hint","sourcebytes":[79,114,105,103,105,110,97,108,32,115,105,122,101],"value":"Original size"}, -{"hash":59301891,"name":"tgridprintpreviewform.acpagemargins.caption","sourcebytes":[77,97,114,103,105,110,115],"value":"Margins"}, -{"hash":116328739,"name":"tgridprintpreviewform.acpagemargins.hint","sourcebytes":[80,97,103,101,32,109,97,114,103,105,110,115],"value":"Page margins"}, -{"hash":208537918,"name":"tgridprintpreviewform.acheaderfooter.caption","sourcebytes":[72,101,97,100,101,114,47,102,111,111,116,101,114,46,46,46],"value":"Header/footer..."}, -{"hash":120242270,"name":"tgridprintpreviewform.acheaderfooter.hint","sourcebytes":[72,101,97,100,101,114,47,102,111,111,116,101,114,32,99,111,110,102,105,103,117,114,97,116,105,111,110],"value":"Header/footer configuration"}, -{"hash":110855028,"name":"tgridprintpreviewform.acportrait.caption","sourcebytes":[80,111,114,116,114,97,105,116],"value":"Portrait"}, -{"hash":97583166,"name":"tgridprintpreviewform.acportrait.hint","sourcebytes":[80,111,114,116,114,97,105,116,32,112,97,103,101,32,111,114,105,101,110,116,97,116,105,111,110],"value":"Portrait page orientation"}, -{"hash":79284965,"name":"tgridprintpreviewform.aclandscape.caption","sourcebytes":[76,97,110,100,115,99,97,112,101],"value":"Landscape"}, -{"hash":214097038,"name":"tgridprintpreviewform.aclandscape.hint","sourcebytes":[76,97,110,100,115,99,97,112,101,32,112,97,103,101,32,111,114,105,101,110,116,97,116,105,111,110],"value":"Landscape page orientation"}, -{"hash":252759476,"name":"tgridprintpreviewform.acprintcolsfirst.caption","sourcebytes":[67,111,108,117,109,110,115,32,102,105,114,115,116],"value":"Columns first"}, -{"hash":179142132,"name":"tgridprintpreviewform.acprintcolsfirst.hint","sourcebytes":[70,105,114,115,116,32,112,114,105,110,116,32,99,111,108,117,109,110,115,32,102,114,111,109,32,116,111,112,32,116,111,32,98,111,116,116,111,109,44,13,10,116,104,101,110,32,112,114,105,110,116,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116],"value":"First print columns from top to bottom,\r\nthen print from left to right"}, -{"hash":90873668,"name":"tgridprintpreviewform.acprintrowsfirst.caption","sourcebytes":[82,111,119,115,32,102,105,114,115,116],"value":"Rows first"}, -{"hash":159637965,"name":"tgridprintpreviewform.acprintrowsfirst.hint","sourcebytes":[70,105,114,115,116,32,112,114,105,110,116,32,114,111,119,115,32,102,114,111,109,32,108,101,102,116,32,116,111,32,114,105,103,104,116,44,13,10,116,104,101,110,32,112,114,105,110,116,32,102,114,111,109,32,116,111,112,32,116,111,32,98,111,116,116,111,109],"value":"First print rows from left to right,\r\nthen print from top to bottom"} +{"hash":231980464,"name":"tgridprintpreviewform.tbpagesetup.caption","sourcebytes":[116,98,80,97,103,101,83,101,116,117,112],"value":"tbPageSetup"}, +{"hash":13109990,"name":"tgridprintpreviewform.tbdivider6.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,54],"value":"tbDivider6"}, +{"hash":13109991,"name":"tgridprintpreviewform.tbdivider7.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,55],"value":"tbDivider7"}, +{"hash":14901026,"name":"tgridprintpreviewform.edpagenumber.text","sourcebytes":[101,100,80,97,103,101,78,117,109,98,101,114],"value":"edPageNumber"} ]} diff --git a/components/gridprinter/source/gridprnpreviewform.pas b/components/gridprinter/source/gridprnpreviewform.pas index 85f1be6a7..72e753dd9 100644 --- a/components/gridprinter/source/gridprnpreviewform.pas +++ b/components/gridprinter/source/gridprnpreviewform.pas @@ -13,16 +13,24 @@ type TGridPrintPreviewZoomMode = (zmCustom, zmFitWidth, zmFitHeight); TGridPrintPreviewOption = (ppoNavigationBtns, ppoNavigationEdit, - ppoZoomBtns, ppoPageOrientationBtns, ppoMarginsBtn, ppoHeaderFooterBtn, - ppoPrintOrderBtns + ppoZoomBtns, + ppoPageOrientationBtns, ppoMarginsBtn, ppoHeaderFooterBtn, + ppoPrintOrderBtns, ppoCenterBtns, + ppoPageSetupBtn, + ppoPageNumberInfo, + ppoZoomLevelInfo ); TGridPrintPreviewOptions = set of TGridPrintPreviewOption; const DEFAULT_GRIDPRN_OPTIONS = [ ppoNavigationBtns, ppoNavigationEdit, - ppoZoomBtns, ppoPageOrientationBtns, ppoMarginsBtn, ppoHeaderFooterBtn, - ppoPrintOrderBtns + ppoZoomBtns, + // ppoPageOrientationBtns, ppoMarginsBtn, ppoHeaderFooterBtn, + // ppoPrintOrderBtns, ppoCenterBtns, + ppoPageSetupBtn, + ppoPageNumberInfo, + ppoZoomLevelInfo ]; type @@ -41,6 +49,8 @@ type acLandscape: TAction; acPrintColsFirst: TAction; acPrintRowsFirst: TAction; + acCenterHor: TAction; + acCenterVert: TAction; acZoom100: TAction; acZoomToFitWidth: TAction; acZoomToFitHeight: TAction; @@ -49,8 +59,21 @@ type ActionList: TActionList; edPageNumber: TEdit; InfoPanel: TPanel; + mnuHeaderFooter: TMenuItem; + mnuPageMargins: TMenuItem; + mnuLandscape: TMenuItem; + mnuPortrait: TMenuItem; + mnuPrintColsFirst: TMenuItem; + mnuPrintRowsFirst: TMenuItem; + mnuCenterHor: TMenuItem; + mnuCenterVert: TMenuItem; + PageSetupPopup: TPopupMenu; + PageNoEditPanel: TPanel; PreviewImage: TImage; ScrollBox: TScrollBox; + mnuSeparator3: TMenuItem; + mnuSeparator2: TMenuItem; + mnuSeparator1: TMenuItem; ToolbarImages: TImageList; ToolBar: TToolBar; tbPrint: TToolButton; @@ -67,14 +90,21 @@ type tbZoomWidth: TToolButton; tbZoomHeight: TToolButton; tbZoom100: TToolButton; - ToolButton1: TToolButton; + tbPageMargins: TToolButton; tbHeaderFooter: TToolButton; - ToolButton2: TToolButton; - ToolButton3: TToolButton; - tbDivider5: TToolButton; tbDivider4: TToolButton; - tbPortraint: TToolButton; + tbPortrait: TToolButton; tbLandscape: TToolButton; + tbDivider5: TToolButton; + tbPageSetup: TToolButton; + tbPrintColsFirst: TToolButton; + tbPrintRowsFirst: TToolButton; + tbCenterHor: TToolButton; + tbCenterVert: TToolButton; + tbDivider6: TToolButton; + tbDivider7: TToolButton; + procedure acCenterHorExecute(Sender: TObject); + procedure acCenterVertExecute(Sender: TObject); procedure acCloseExecute(Sender: TObject); procedure acFirstPageExecute(Sender: TObject); procedure acHeaderFooterExecute(Sender: TObject); @@ -115,6 +145,7 @@ type FDraggedPos: Integer; FGridPrinter: TGridPrinter; FHintWindow: THintWindow; + FInfoMask: String; FPageCount: Integer; FPageNumber: Integer; FOptions: TGridPrintPreviewOptions; @@ -165,6 +196,8 @@ uses const ZOOM_MULTIPLIER = 1.05; + CHECKMARK = #$E2#$9C#$93; // Checkmark characer in UTF-8 + SPACE_CHECKMARK = ' ' + CHECKMARK; { Returns true when X1 is in range between X2-Delta and X2+Delta. } function InRange(X1, X2, Delta: Integer): Boolean; inline; @@ -185,6 +218,16 @@ begin Result := X; end; +{ Appends a checkmark to the given caption string if AEnable is true. + Meant to better show the checked state of menu items having icons. } +function MarkAsChecked(ACaption: String; AEnable: Boolean): String; +begin + if AEnable then + Result := ACaption + SPACE_CHECKMARK + else + Result := ACaption; +end; + { TGridPrintPreviewForm } constructor TGridPrintPreviewForm.Create(AOwner: TComponent); @@ -208,6 +251,32 @@ begin ModalResult := mrCancel; end; +procedure TGridPrintPreviewForm.acCenterHorExecute(Sender: TObject); +begin + if Assigned(FGridPrinter) then + begin + if acCenterHor.Checked then + FGridPrinter.Options := FGridPrinter.Options + [gpoCenterHor] + else + FGridPrinter.Options := FGridPrinter.Options - [gpoCenterHor]; + acCenterHor.Caption := MarkAsChecked(RSCenterHor, acCenterHor.Checked); + ShowPage(FPageNumber); + end; +end; + +procedure TGridPrintPreviewForm.acCenterVertExecute(Sender: TObject); +begin + if Assigned(FGridPrinter) then + begin + if acCenterVert.Checked then + FGridPrinter.Options := FGridPrinter.Options + [gpoCenterVert] + else + FGridPrinter.Options := FGridPrinter.Options - [gpoCenterVert]; + acCenterVert.Caption := MarkAsChecked(RSCenterVert, acCenterVert.Checked); + ShowPage(FPageNumber); + end; +end; + procedure TGridPrintPreviewForm.acFirstPageExecute(Sender: TObject); begin ShowPage(1); @@ -232,6 +301,8 @@ begin if Assigned(FGridPrinter) then begin acLandscape.Checked := true; + acLandscape.Caption := MarkAsChecked(RSLandscape, true); + acPortrait.Caption := MarkAsChecked(RSPortrait, false); FGridPrinter.Orientation := poLandscape; ShowPage(FPageNumber); end; @@ -259,6 +330,8 @@ begin if Assigned(FGridPrinter) then begin acPortrait.Checked := true; + acPortrait.Caption := MarkAsChecked(RSPortrait, true); + acLandscape.Caption := MarkAsChecked(RSLandscape, false); FGridPrinter.Orientation := poPortrait; ShowPage(FPageNumber); end; @@ -275,6 +348,8 @@ begin if Assigned(FGridPrinter) then begin acPrintColsFirst.Checked := true; + acPrintColsFirst.Caption := MarkAsChecked(RSPrintColsFirst, true); + acPrintRowsFirst.Caption := RSPrintRowsFirst; FGridPrinter.PrintOrder := poColsFirst; ShowPage(FPageNumber); end; @@ -290,6 +365,8 @@ begin if Assigned(FGridPrinter) then begin acPrintRowsFirst.Checked := true; + acPrintRowsFirst.Caption := MarkAsChecked(RSPrintRowsFirst, true); + acPrintColsFirst.Caption := RSPrintColsFirst; FGridPrinter.PrintOrder := poRowsFirst; ShowPage(FPageNumber); end; @@ -324,8 +401,10 @@ begin acLandscape.Enabled := (FGridPrinter <> nil); acHeaderFooter.Enabled := acPrint.Enabled; acPageMargins.Enabled := acPrint.Enabled; - acPrintColsFirst.Enabled := acPrint.Enabled;; - acPrintRowsFirst.Enabled := acPrint.Enabled;; + acPrintColsFirst.Enabled := acPrint.Enabled; + acPrintRowsFirst.Enabled := acPrint.Enabled; + acCenterHor.Enabled := acPrint.Enabled; + acCenterVert.Enabled := acPrint.Enabled; end; procedure TGridPrintPreviewForm.acZoomInZoomOutExecute(Sender: TObject); @@ -771,30 +850,45 @@ begin begin FGridPrinter := AValue; case FGridPrinter.Orientation of - poPortrait: acPortrait.Checked := true; - poLandscape: acLandscape.Checked := true; + poPortrait: + acPortrait.Checked := true; + poLandscape: + acLandscape.Checked := true; end; - case FGridPrinter.PrintOrder of - poRowsFirst: acPrintRowsFirst.Checked := true; - poColsFirst: acPrintColsFirst.Checked := true; + poRowsFirst: + acPrintRowsFirst.Checked := true; + poColsFirst: + acPrintColsFirst.Checked := true; end; + acCenterHor.Checked := gpoCenterHor in FGridPrinter.Options; + acCenterVert.Checked := gpoCenterVert in FGridPrinter.Options; + + acPortrait.Caption := MarkAsChecked(RSPortrait, acPortrait.Checked); + acLandscape.Caption := MarkAsChecked(RSLandscape, acLandscape.Checked); + acPrintRowsFirst.Caption := MarkAsChecked(RSPrintRowsFirst, acPrintRowsFirst.Checked); + acPrintColsFirst.Caption := MarkAsChecked(RSPrintColsFirst, acPrintColsFirst.Checked); + acCenterHor.Caption := MarkAsChecked(RSCenterHor, acCenterHor.Checked); + acCenterVert.Caption := MarkAsChecked(RSCenterVert, acCenterVert.Checked); end; + SetOptions(FOptions); end; procedure TGridPrintPreviewForm.SetOptions(AValue: TGridPrintPreviewOptions); begin - if FOptions <> AValue then + //if FOptions <> AValue then begin FOptions := AValue; + // Page navigation acFirstPage.Visible := ppoNavigationBtns in FOptions; acPrevpage.Visible := acFirstpage.Visible; acNextPage.Visible := acFirstPage.Visible; acLastPage.Visible := acFirstPage.Visible; - edPageNumber.Visible := ppoNavigationEdit in FOptions; - tbDivider1.Visible := acFirstPage.Visible or edPageNumber.Visible; + PageNoEditPanel.Visible := ppoNavigationEdit in FOptions; + tbDivider1.Visible := acFirstPage.Visible or PageNoEditPanel.Visible; + // Zooming acZoomIn.Visible := ppoZoomBtns in FOptions; acZoomOut.Visible := acZoomIn.Visible; acZoom100.Visible := acZoomIn.Visible; @@ -802,15 +896,78 @@ begin acZoomtoFitHeight.Visible := acZoomIn.Visible; tbDivider2.Visible := acZoomIn.Visible; - acPortrait.Visible := ppoPageOrientationBtns in FOptions; - acLandscape.Visible := acPortrait.Visible; - acHeaderFooter.Visible := ppoHeaderFooterBtn in FOptions; - acPageMargins.Visible := ppoMarginsBtn in FOptions; - tbDivider3.Visible := acPortrait.Visible or acHeaderFooter.Visible or acPageMargins.Visible; + // Page orientation, header/footer and page margins + if ppoPageOrientationBtns in FOptions then + begin + tbPortrait.Action := acPortrait; + tbLandscape.Action := acLandscape; + end else + begin + tbPortrait.Action := nil; + tbLandscape.Action := nil; + end; + tbPortrait.Visible := tbPortrait.Action <> nil; + tbLandscape.Visible := tbLandscape.Action <> nil; - acPrintColsFirst.Visible := ppoPrintOrderBtns in FOptions; - acPrintRowsFirst.Visible := acPrintColsFirst.Visible; - tbDivider4.Visible := acPrintColsFirst.Visible; + if ppoHeaderFooterBtn in FOptions then + tbHeaderFooter.Action := acHeaderFooter + else + tbHeaderFooter.Action := nil; + tbHeaderFooter.Visible := tbHeaderFooter.Action <> nil; + + if ppoMarginsBtn in FOptions then + tbPageMargins.Action := acPageMargins + else + tbPageMargins.Action := nil; + tbPageMargins.Visible := tbPageMargins.Action <> nil; + + tbDivider3.Visible := + (FOptions * [ppoPageOrientationBtns, ppoHeaderFooterBtn, ppoMarginsBtn] <> []); + + // Print order + if ppoPrintOrderBtns in FOptions then + begin + tbPrintColsFirst.Action := acPrintColsFirst; + tbPrintRowsFirst.Action := acPrintRowsFirst; + end else + begin + tbPrintColsFirst.Action := nil; + tbPrintRowsFirst.Action := nil; + end; + tbPrintColsFirst.Visible := tbPrintColsFirst.Action <> nil; + tbPrintRowsFirst.Visible := tbPrintRowsFirst.Action <> nil; + tbDivider4.Visible := tbPrintColsFirst.Visible; + + // Page centering + if ppoCenterBtns in FOptions then + begin + tbCenterHor.Action := acCenterHor; + tbCenterVert.Action := acCenterVert; + end else + begin + tbCenterHor.Action := nil; + tbCenterVert.Action := nil; + end; + tbCenterHor.Visible := tbCenterHor.Action <> nil; + tbCenterVert.Visible := tbCenterVert.Action <> nil; + tbDivider5.Visible := tbCenterHor.Action <> nil; + + // Page setup dropdown button + tbPageSetup.Visible := ppoPageSetupBtn in FOptions; + tbDivider6.Visible := tbPageSetup.Visible; + + // Page number info + if FOptions * [ppoPageNumberInfo, ppoZoomLevelInfo] = [ppoPageNumberInfo, ppoZoomLevelInfo] then + FInfoMask := RSPageAndZoomInfo + else + if (ppoPageNumberInfo in FOptions) then + FInfoMask := RSPageInfo + else + if (ppoZoomLevelInfo in FOptions) then + FInfoMask := RSZoomInfo + else + FInfoMask := ''; + InfoPanel.Visible := FInfoMask <> ''; end; end; @@ -877,9 +1034,14 @@ end; procedure TGridPrintPreviewForm.UpdateInfoPanel; begin - InfoPanel.Caption := Format(RSPageAndZoomInfo, [FPageNumber, FPageCount, FZoom]); - InfoPanel.Width := InfoPanel.Canvas.TextWidth(InfoPanel.Caption); - InfoPanel.Left := Toolbar.ClientWidth - InfoPanel.Width - 8; + if FOptions * [ppoPageNumberInfo, ppoZoomLevelInfo] <> [] then + begin + InfoPanel.Caption := Format(FInfoMask, [FPageNumber, FPageCount, FZoom]); + InfoPanel.Width := InfoPanel.Canvas.TextWidth(InfoPanel.Caption); + InfoPanel.Left := Toolbar.ClientWidth - InfoPanel.Width - 8; + InfoPanel.Show; + end else + InfoPanel.Hide; edPageNumber.Text := IntToStr(FPageNumber); end; @@ -890,6 +1052,14 @@ begin // Toolbar captions acPrint.Caption := RSPrint; acClose.Caption := RSClose; + acPortrait.Caption := RSPortrait; + acLandscape.Caption := RSLandscape; + acHeaderFooter.Caption := RSHeaderFooter; + acPageMargins.Caption := RSPageMargins; + acPrintColsFirst.Caption := RSPrintColsFirst; + acPrintRowsFirst.Caption := RSPrintRowsFirst; + acCenterHor.Caption := RSCenterHor; + acCenterVert.Caption := RSCenterVert; // Toolbar hints acPrint.Hint := RSPrint; @@ -904,11 +1074,15 @@ begin acZoomToFitHeight.Hint := RSZoomToFitPageHeight; acZoom100.Hint := RSOriginalSize; acPageMargins.Hint := RSPageMarginsConfig; - acHeaderFooter.Hint := RSHeaderFooterConfig; - acPortrait.Hint := RSPortraitPageOrientation; - acLandscape.Hint := RSLandscapePageOrientation; - acPrintColsFirst.Hint := RSPrintColsFirst; - acPrintRowsFirst.Hint := RSPrintRowsFirst; + acPortrait.Hint := RSPortraitHint; + acLandscape.Hint := RSLandscapeHint; + acHeaderFooter.Hint := RSHeaderFooterHint; + acPageMargins.Hint := RSPageMarginsHint; + acPrintColsFirst.Hint := RSPrintColsFirstHint; + acPrintRowsFirst.Hint := RSPrintRowsFirstHint; + acCenterHor.Hint := RSCenterHorHint; + acCenterVert.Hint := RSCenterVertHint; + tbPageSetup.Hint := RSPageSetupHint; end; diff --git a/components/gridprinter/source/gridprnstrings.pas b/components/gridprinter/source/gridprnstrings.pas index 4fe1e5e12..428c1bad9 100644 --- a/components/gridprinter/source/gridprnstrings.pas +++ b/components/gridprinter/source/gridprnstrings.pas @@ -23,13 +23,27 @@ resourcestring RSZoomToFitPageHeight = 'Zoom to fit page height'; RSOriginalSize = 'Original size (100%)'; RSPageMarginsConfig = 'Page margins configuration'; - RSHeaderFooterConfig = 'Header/footer configuration'; - RSPortraitPageOrientation = 'Portrait page orientation'; - RSLandscapePageOrientation = 'Landscape page orientation'; - RSPrintColsFirst = 'First print columns from top to bottom,' + LineEnding + + RSPortrait = 'Portrait'; + RSPortraitHint = 'Portrait page orientation'; + RSLandscape = 'Landscape'; + RSLandscapeHint = 'Landscape page orientation'; + RSHeaderFooter = 'Header/footer...'; + RSHeaderFooterHint = 'Header/footer configuration'; + RSPageMargins = 'Margins'; + RSPageMarginsHint = 'Page margins'; + RSPrintColsFirst = 'Columns first'; + RSPrintColsFirstHint = 'First print columns from top to bottom,' + LineEnding + 'then print from left to right'; - RSPrintRowsFirst = 'First print rows from left to right,' + LineEnding + + RSPrintRowsFirst = 'Rows first'; + RSPrintRowsFirstHint = 'First print rows from left to right,' + LineEnding + 'then print from top to bottom'; + RSCenterHor = 'Center horizontally'; + RSCenterHorHint = 'Center grid in page horizontally'; + RSCenterVert = 'Center vertically'; + RSCenterVertHint = 'Center grid in page vertically'; + RSPageSetupHint = 'Page setup options'; + RSPageInfoPanel = 'Page numbers'; + RSZoomInfoPanel = 'Zoom level'; RSLeftMargin = 'Left margin'; RSTopMargin = 'Top margin'; @@ -38,7 +52,9 @@ resourcestring RSHeaderMargin = 'Header margin'; RSFooterMargin = 'Footer margin'; - RSPageAndZoomInfo = 'Page %d of %d, Zoom %d %%'; + RSPageInfo = 'Page %0:d of %1:d'; + RSZoomInfo = 'Zoom %2:d %%'; + RSPageAndZoomInfo = 'Page %0:d of %1:d, Zoom %2:d %%'; // Header / footer RSHeader = 'Header';