mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-05 13:58:04 +02:00
405 lines
11 KiB
ObjectPascal
405 lines
11 KiB
ObjectPascal
{
|
|
This file is part of the Free Component Library.
|
|
Copyright (c) 2016 Michael Van Canneyt, member of the Free Pascal development team
|
|
|
|
Configure FPReport to fpimage export dialog to be used in LCL preview.
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
|
|
unit cfgfpreporthtmlexport;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn,
|
|
StdCtrls, ButtonPanel, ExtCtrls, Spin, ComCtrls, fpreport, fpreporthtmlutil, fpreporthtmlexport;
|
|
|
|
type
|
|
{ TConfigHTMLExportForm }
|
|
// hnoFirstLast,hnoAlwaysFirstLast,hnoPageNo,hnoImage,hnoSkipStyling,hnoUsePageNOfM,hnoPageNoEdit
|
|
TConfigHTMLExportForm = class(TForm)
|
|
BPExport: TButtonPanel;
|
|
CBBottomNavigator: TCheckBox;
|
|
CBDPI: TComboBox;
|
|
CBFirstlast: TCheckBox;
|
|
CBFrame: TCheckBox;
|
|
CBLeftNavigator: TCheckBox;
|
|
CBRightNavigator: TCheckBox;
|
|
CBTopNavigator: TCheckBox;
|
|
CBAdvancedOptions: TCheckBox;
|
|
CBInlineImage: TCheckBox;
|
|
CBIMGTag: TCheckBox;
|
|
CBFixedPositioning: TCheckBox;
|
|
CBTOCPage: TCheckBox;
|
|
CBMemoAsIS: TCheckBox;
|
|
CBExternalJS: TCheckBox;
|
|
CBPageEdit: TCheckBox;
|
|
CBPageNofM: TCheckBox;
|
|
CBalwaysFirstLast: TCheckBox;
|
|
CBPageNo: TCheckBox;
|
|
CBSkipStyling: TCheckBox;
|
|
CBNavigatorImages: TCheckBox;
|
|
CBTOCSkipStyling: TCheckBox;
|
|
CBNavigatorInActiveColor: TColorButton;
|
|
CBNavigatorActiveColor: TColorButton;
|
|
Edit1: TEdit;
|
|
Edit2: TEdit;
|
|
EOddPageStyle: TEdit;
|
|
EEvenPageStyle: TEdit;
|
|
ESeparator: TEdit;
|
|
FEBaseFileName: TFileNameEdit;
|
|
FETOCCSSFileName: TFileNameEdit;
|
|
FEFrameTOCHtml: TFileNameEdit;
|
|
FEFrameTOCCSS: TFileNameEdit;
|
|
FETOCFileName: TFileNameEdit;
|
|
Label1: TLabel;
|
|
LNavInactive: TLabel;
|
|
LNavActive: TLabel;
|
|
Label2: TLabel;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
Label6: TLabel;
|
|
LNavHeight: TLabel;
|
|
Label7: TLabel;
|
|
LNavWidth: TLabel;
|
|
Label9: TLabel;
|
|
LTOCStyling: TLabel;
|
|
LTOCPageFileName: TLabel;
|
|
Label3: TLabel;
|
|
LCBDPI: TLabel;
|
|
LESeparator: TLabel;
|
|
LFEPDF: TLabel;
|
|
LSEDigits: TLabel;
|
|
LTOCPageFileName1: TLabel;
|
|
PCOptions: TPageControl;
|
|
RGTocZone: TRadioGroup;
|
|
RGStyle: TRadioGroup;
|
|
SEDigits: TSpinEdit;
|
|
Navigation: TTabSheet;
|
|
SENavigatorFixedHeight: TSpinEdit;
|
|
SENavigatorFixedMargin: TSpinEdit;
|
|
SETOCZoneWidth: TSpinEdit;
|
|
SENavigatorFixedWidth: TSpinEdit;
|
|
TabSheet1: TTabSheet;
|
|
TSNavigator: TTabSheet;
|
|
TTocPage: TTabSheet;
|
|
TSFrame: TTabSheet;
|
|
TSAdvanced: TTabSheet;
|
|
TSOptions: TTabSheet;
|
|
procedure CBAdvancedOptionsChange(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
private
|
|
procedure GetImageFilter;
|
|
procedure LocalizeForm;
|
|
{ private declarations }
|
|
public
|
|
{ public declarations TFPReportExportfpImage }
|
|
Procedure ConfigToForm(AExporter: TFPReportExportHTML);
|
|
Procedure FormToConfig(AExporter: TFPReportExportHTML);
|
|
end;
|
|
|
|
{ THTMLConfigObj }
|
|
|
|
THTMLConfigObj = Class
|
|
public
|
|
Procedure RegisterHandler;
|
|
procedure DoConfig(Sender: TObject; AExporter: TFPReportExporter; var Cancelled: Boolean);
|
|
end;
|
|
|
|
var
|
|
ConfigHTMLExportForm: TConfigHTMLExportForm;
|
|
|
|
Procedure RegisterHTMLExportConfig;
|
|
|
|
implementation
|
|
|
|
uses fpimage, fppdf;
|
|
|
|
{$R *.lfm}
|
|
|
|
Var
|
|
Cfg : THTMLConfigObj;
|
|
|
|
Resourcestring
|
|
SFiles = 'Files';
|
|
|
|
Procedure RegisterHTMLExportConfig;
|
|
|
|
begin
|
|
FreeAndNil(Cfg);
|
|
Cfg:=THTMLConfigObj.Create;
|
|
Cfg.RegisterHandler;
|
|
end;
|
|
|
|
{ TConfigHTMLExportForm }
|
|
|
|
procedure TConfigHTMLExportForm.LocalizeForm;
|
|
|
|
|
|
begin
|
|
GetImageFilter;
|
|
end;
|
|
|
|
procedure TConfigHTMLExportForm.GetImageFilter;
|
|
|
|
Var
|
|
I : Integer;
|
|
S,TN : String;
|
|
|
|
begin
|
|
S:='';
|
|
with ImageHandlers do
|
|
For I:=0 to Count-1 do
|
|
begin
|
|
TN:=TypeNames[I];
|
|
if (S<>'') then
|
|
S:=S+'|';
|
|
|
|
S:=S+TN+' '+SFiles+'|*'+{$IFDEF VER2_6_4}DefaultExtention[TN]{$else}DefaultExtension[TN]{$ENDIF};
|
|
end;
|
|
FEBaseFileName.Filter:=S;
|
|
end;
|
|
|
|
procedure TConfigHTMLExportForm.FormCreate(Sender: TObject);
|
|
begin
|
|
LocalizeForm;
|
|
CBAdvancedOptionsChange(Self);
|
|
end;
|
|
|
|
procedure TConfigHTMLExportForm.CBAdvancedOptionsChange(Sender: TObject);
|
|
begin
|
|
TSAdvanced.TabVisible:=CBAdvancedOptions.Checked;
|
|
TSFrame.TabVisible:=CBAdvancedOptions.Checked;
|
|
TTocPage.TabVisible:=CBAdvancedOptions.Checked;
|
|
TSNavigator.TabVisible:=CBAdvancedOptions.Checked;
|
|
end;
|
|
|
|
procedure TConfigHTMLExportForm.ConfigToForm(AExporter: TFPReportExportHTML);
|
|
|
|
procedure setcb(CB : TCheckBox; O : THTMLExportOption);
|
|
|
|
begin
|
|
CB.Checked:=O in AExporter.Options;
|
|
end;
|
|
|
|
procedure setcbn(CB : TCheckBox; O : THTMLNavigatorOption);
|
|
|
|
begin
|
|
CB.Checked:=O in AExporter.PageNavigator.Options;
|
|
end;
|
|
|
|
procedure setcbp(CB : TCheckBox; O : TNavigatorPosition);
|
|
|
|
begin
|
|
CB.Checked:=O in AExporter.PageNavigator.Positions;
|
|
end;
|
|
|
|
Function RelFileName(FN : String) : String;
|
|
|
|
begin
|
|
Result:='';
|
|
if (FN<>'') and (FEBaseFileName.FileName<>'') then
|
|
Result:=ExtractRelativepath(ExtractFilePath(ExpandFileName(FEBaseFileName.FileName)),
|
|
ExpandFileName(FN));
|
|
end;
|
|
|
|
Procedure Col(CB : TColorButton; Col : TFPReportColor);
|
|
|
|
Var
|
|
S : TFPColor;
|
|
|
|
begin
|
|
if Col=clNone then
|
|
CB.Color:=graphics.clNone
|
|
else
|
|
begin
|
|
S:=ColorToRGBTriple(Col);
|
|
CB.Color:=RGBToColor(S.red,S.Green,S.Blue);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
SetCB(CBInlineImage,heoInlineImage);
|
|
SetCB(CBFixedPositioning,heoFixedPositioning);
|
|
SetCB(CBIMGTag,heoUseIMGtag);
|
|
SetCB(CBTOCPage, heoTOCPage);
|
|
SetCB(CBFrame,heoTOCPageFrame);
|
|
SetCB(CBMemoAsIS,heoMemoAsIs);
|
|
SetCB(CBExternalJS,heoExternalJS);
|
|
|
|
SetCBN(CBFirstlast,hnoFirstLast);
|
|
SetCBN(CBAlwaysFirstLast,hnoAlwaysFirstLast);
|
|
SetCBN(CBPageNo,hnoPageNo);
|
|
SetCBN(CBNavigatorImages,hnoImage);
|
|
SetCBN(CBSkipStyling,hnoSkipStyling);
|
|
SetCBN(CBPageNofM,hnoUsePageNOfM);
|
|
SetCBN(CBPageEdit,hnoPageNoEdit);
|
|
|
|
SetCBP(CBTopNavigator,npTop);
|
|
SetCBP(CBBottomNavigator,npBottom);
|
|
SetCBP(CBLeftNavigator,npLeft);
|
|
SetCBP(CBRightNavigator,npRight);
|
|
|
|
RGStyle.ItemIndex:=Ord(AExporter.StyleEmbedding);
|
|
|
|
if (AExporter.BaseFileName<>'') then
|
|
FEBaseFileName.FileName:=ExpandFileName(AExporter.BaseFileName);
|
|
|
|
FEFrameTOCHtml.FileName:=AExporter.FramePage.FileName;
|
|
FEFrameTOCCSS.FileName:=AExporter.FramePage.CSSFileName;
|
|
RGTocZone.Itemindex:=Ord(AExporter.FramePage.TOCZonePosition);
|
|
SETOCZoneWidth.Value:=AExporter.FramePage.TOCZoneSize;
|
|
|
|
FETOCFileName.FileName:=RelFileName(AExporter.TOCPage.FileName);
|
|
FETOCCSSFileName.FileName:=RelFileName(AExporter.TOCPage.CSSFileName);
|
|
CBTOCSkipStyling.Checked := AExporter.TOCPage.SkipStyling;
|
|
EEvenPageStyle.Text := AExporter.TOCPage.EvenPageStyle;
|
|
EOddPageStyle.Text := AExporter.TOCPage.OddPageStyle;
|
|
|
|
SENavigatorFixedHeight.Value:=AExporter.PageNavigator.FixedHeight;
|
|
SENavigatorFixedWidth.Value:=AExporter.PageNavigator.FixedWidth;
|
|
SENavigatorFixedMargin.Value:=AExporter.PageNavigator.FixedMargin;
|
|
Col(CBNavigatorActiveColor,AExporter.PageNavigator.ActiveBGColor);
|
|
Col(CBNavigatorInActiveColor,AExporter.PageNavigator.InActiveBGColor);
|
|
|
|
CBDPI.Text:=IntToStr(AExporter.DPI);
|
|
end;
|
|
|
|
procedure TConfigHTMLExportForm.FormToConfig(AExporter: TFPReportExportHTML);
|
|
|
|
Var
|
|
Sep : String;
|
|
|
|
|
|
procedure setcb(CB : TCheckBox; O : THTMLExportOption);
|
|
|
|
begin
|
|
if CB.Checked then
|
|
AExporter.Options:=AExporter.Options+[o]
|
|
else
|
|
AExporter.Options:=AExporter.Options-[o];
|
|
end;
|
|
|
|
procedure setcbn(CB : TCheckBox; O : THTMLNavigatorOption);
|
|
|
|
begin
|
|
if CB.Checked then
|
|
AExporter.PageNavigator.Options:=AExporter.PageNavigator.Options+[O]
|
|
else
|
|
AExporter.PageNavigator.Options:=AExporter.PageNavigator.Options-[O]
|
|
end;
|
|
|
|
procedure setcbp(CB : TCheckBox; O : TNavigatorPosition);
|
|
|
|
begin
|
|
if CB.Checked then
|
|
AExporter.PageNavigator.Positions:=AExporter.PageNavigator.Positions+[O]
|
|
else
|
|
AExporter.PageNavigator.Positions:=AExporter.PageNavigator.Positions-[O];
|
|
end;
|
|
|
|
Function RelFileName(FN : String) : String;
|
|
|
|
begin
|
|
Result:=ExtractRelativepath(ExtractFilePath(ExpandFileName(FEBaseFileName.FileName)),
|
|
ExpandFileName(FN));
|
|
end;
|
|
|
|
Function Col(CB : TColorButton) : TFPReportColor;
|
|
|
|
begin
|
|
if CB.Color<>Graphics.clNone then
|
|
Result:=ColorToRGB(CB.Color)
|
|
else
|
|
Result:=clNone;
|
|
end;
|
|
|
|
begin
|
|
SetCB(CBInlineImage,heoInlineImage);
|
|
SetCB(CBFixedPositioning,heoFixedPositioning);
|
|
SetCB(CBIMGTag,heoUseIMGtag);
|
|
SetCB(CBTOCPage, heoTOCPage);
|
|
SetCB(CBFrame,heoTOCPageFrame);
|
|
SetCB(CBMemoAsIS,heoMemoAsIs);
|
|
SetCB(CBExternalJS,heoExternalJS);
|
|
|
|
SetCBN(CBFirstlast,hnoFirstLast);
|
|
SetCBN(CBAlwaysFirstLast,hnoAlwaysFirstLast);
|
|
SetCBN(CBPageNo,hnoPageNo);
|
|
SetCBN(CBNavigatorImages,hnoImage);
|
|
SetCBN(CBSkipStyling,hnoSkipStyling);
|
|
SetCBN(CBPageNofM,hnoUsePageNOfM);
|
|
SetCBN(CBPageEdit,hnoPageNoEdit);
|
|
|
|
SetCBP(CBTopNavigator,npTop);
|
|
SetCBP(CBBottomNavigator,npBottom);
|
|
SetCBP(CBLeftNavigator,npLeft);
|
|
SetCBP(CBRightNavigator,npRight);
|
|
|
|
AExporter.FramePage.FileName := RelFileName(FEFrameTOCHtml.FileName);
|
|
AExporter.FramePage.CSSFileName := RelFileName(FEFrameTOCCSS.FileName);
|
|
AExporter.FramePage.TOCZonePosition := TTOCPosition(RGTocZone.Itemindex);
|
|
AExporter.FramePage.TOCZoneSize := SETOCZoneWidth.Value;
|
|
|
|
AExporter.TOCPage.FileName:=RelFileName(FETOCFileName.FileName);
|
|
AExporter.TOCPage.CSSFileName:=RelFileName(FETOCCSSFileName.FileName);
|
|
AExporter.TOCPage.SkipStyling:=CBTOCSkipStyling.Checked;
|
|
AExporter.TOCPage.EvenPageStyle:=EEvenPageStyle.Text;
|
|
AExporter.TOCPage.OddPageStyle:=EOddPageStyle.Text;
|
|
|
|
AExporter.PageNavigator.FixedHeight := SENavigatorFixedHeight.Value;
|
|
AExporter.PageNavigator.FixedWidth := SENavigatorFixedWidth.Value;
|
|
AExporter.PageNavigator.FixedMargin := SENavigatorFixedMargin.Value;
|
|
AExporter.PageNavigator.ActiveBGColor:=Col(CBNavigatorActiveColor);
|
|
AExporter.PageNavigator.InActiveBGColor:=Col(CBNavigatorInActiveColor);
|
|
|
|
if RGStyle.ItemIndex<>-1 then
|
|
AExporter.StyleEmbedding:=TStyleEmbedding(RGStyle.ItemIndex);
|
|
AExporter.BaseFileName:=FEBaseFileName.FileName;
|
|
Sep:=StringReplace(ESeparator.Caption,'%','%%',[]);
|
|
if SEDigits.Value=1 then
|
|
AExporter.SequenceFormat:=Sep+'%d'
|
|
else
|
|
AExporter.SequenceFormat:=Sep+'%.'+IntToStr(SEDigits.Value)+'d';
|
|
end;
|
|
|
|
|
|
{ TFPImageConfigObj }
|
|
|
|
procedure THTMLConfigObj.RegisterHandler;
|
|
begin
|
|
if ReportExportManager.FindExporter(TFPReportExportHTML.Name)<>Nil then
|
|
ReportExportManager.RegisterConfigHandler(TFPReportExportHTML.Name,@DoConfig);
|
|
end;
|
|
|
|
procedure THTMLConfigObj.DoConfig(Sender: TObject; AExporter: TFPReportExporter;
|
|
var Cancelled: Boolean);
|
|
begin
|
|
Cancelled:=True;
|
|
With TConfigHTMLExportForm.Create(Application) do
|
|
try
|
|
ConfigToForm(AExporter as TFPReportExportHTML);
|
|
Cancelled:=ShowModal<>mrOK;
|
|
if not Cancelled then
|
|
FormToConfig(AExporter as TFPReportExportHTML);
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
RegisterHTMLExportConfig;
|
|
finalization
|
|
FreeAndNil(Cfg);
|
|
end.
|
|
|