* Add import possibility

git-svn-id: trunk@57841 -
This commit is contained in:
michael 2018-05-08 08:57:49 +00:00
parent 4ed3446f8f
commit be003a0639
9 changed files with 193 additions and 5 deletions

2
.gitattributes vendored
View File

@ -1561,6 +1561,8 @@ components/fpreport/design/frmfpreportvariables.lfm svneol=native#text/plain
components/fpreport/design/frmfpreportvariables.pp svneol=native#text/plain components/fpreport/design/frmfpreportvariables.pp svneol=native#text/plain
components/fpreport/design/frmideselectreportdata.lfm svneol=native#text/plain components/fpreport/design/frmideselectreportdata.lfm svneol=native#text/plain
components/fpreport/design/frmideselectreportdata.pp svneol=native#text/plain components/fpreport/design/frmideselectreportdata.pp svneol=native#text/plain
components/fpreport/design/frmlazreportimportlog.lfm svneol=native#text/plain
components/fpreport/design/frmlazreportimportlog.pp svneol=native#text/plain
components/fpreport/design/lazfpreportdesign.lpk svneol=native#text/plain components/fpreport/design/lazfpreportdesign.lpk svneol=native#text/plain
components/fpreport/design/lazfpreportdesign.pas svneol=native#text/plain components/fpreport/design/lazfpreportdesign.pas svneol=native#text/plain
components/fpreport/design/lazidefpreport.lpk svneol=native#text/plain components/fpreport/design/lazidefpreport.lpk svneol=native#text/plain

View File

@ -385,6 +385,9 @@ object FPReportDesignerForm: TFPReportDesignerForm
object MISaveAs: TMenuItem object MISaveAs: TMenuItem
Action = AFileSaveAs Action = AFileSaveAs
end end
object MIImportLazReport: TMenuItem
Action = AImportLazreport
end
object MIRecent: TMenuItem object MIRecent: TMenuItem
Caption = 'Recent' Caption = 'Recent'
end end
@ -1002,6 +1005,11 @@ object FPReportDesignerForm: TFPReportDesignerForm
OnExecute = ABringToFrontExecute OnExecute = ABringToFrontExecute
OnUpdate = ASendToBackFrontUpdate OnUpdate = ASendToBackFrontUpdate
end end
object AImportLazreport: TAction
Caption = 'Import Lazreport...'
OnExecute = AImportLazreportExecute
OnUpdate = AImportLazreportUpdate
end
end end
object SDReport: TSaveDialog object SDReport: TSaveDialog
DefaultExt = '.json' DefaultExt = '.json'
@ -2428,4 +2436,10 @@ object FPReportDesignerForm: TFPReportDesignerForm
left = 467 left = 467
top = 209 top = 209
end end
object ODImport: TOpenDialog
Filter = 'LazReport reports|*.lrf|All files|*.*'
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
left = 483
top = 120
end
end end

View File

@ -34,7 +34,8 @@ type
rdoAllowNew, // Allow user to start new report rdoAllowNew, // Allow user to start new report
rdoAllowPreview, // Allow user to ask report preview rdoAllowPreview, // Allow user to ask report preview
rdoAllowBands, // Allow user to add/remove bands rdoAllowBands, // Allow user to add/remove bands
rdoAllowFileDrop // Allow user to drop files on designer, so they will be loaded. rdoAllowFileDrop, // Allow user to drop files on designer, so they will be loaded.
rdoAllowImport // Allow import of other formats (needs rdoAllowLoad as well)
); );
TFPReportDesignOptions = set of TFPReportDesignOption; TFPReportDesignOptions = set of TFPReportDesignOption;
@ -85,6 +86,7 @@ type
AAlign: TAction; AAlign: TAction;
ACopy: TAction; ACopy: TAction;
ABringToFront: TAction; ABringToFront: TAction;
AImportLazreport: TAction;
ASendToBack: TAction; ASendToBack: TAction;
AEditElement: TAction; AEditElement: TAction;
AFileOpenNewWindow: TAction; AFileOpenNewWindow: TAction;
@ -120,6 +122,7 @@ type
MenuItem2: TMenuItem; MenuItem2: TMenuItem;
MenuItem3: TMenuItem; MenuItem3: TMenuItem;
MenuItem4: TMenuItem; MenuItem4: TMenuItem;
MIImportLazReport: TMenuItem;
MIBringToFront: TMenuItem; MIBringToFront: TMenuItem;
MISendToBack: TMenuItem; MISendToBack: TMenuItem;
MIEditElement: TMenuItem; MIEditElement: TMenuItem;
@ -140,6 +143,7 @@ type
MFrames: TMenuItem; MFrames: TMenuItem;
MIRecent: TMenuItem; MIRecent: TMenuItem;
MIAddPage: TMenuItem; MIAddPage: TMenuItem;
ODImport: TOpenDialog;
PMRecent: TPopupMenu; PMRecent: TPopupMenu;
PSDesign: TIniPropStorage; PSDesign: TIniPropStorage;
MIAlign: TMenuItem; MIAlign: TMenuItem;
@ -276,6 +280,8 @@ type
procedure AFileSaveUpdate(Sender: TObject); procedure AFileSaveUpdate(Sender: TObject);
procedure AFrameExecute(Sender: TObject); procedure AFrameExecute(Sender: TObject);
procedure AFrameUpdate(Sender: TObject); procedure AFrameUpdate(Sender: TObject);
procedure AImportLazreportExecute(Sender: TObject);
procedure AImportLazreportUpdate(Sender: TObject);
procedure ANewExecute(Sender: TObject); procedure ANewExecute(Sender: TObject);
procedure ANewNewWindowExecute(Sender: TObject); procedure ANewNewWindowExecute(Sender: TObject);
procedure APasteExecute(Sender: TObject); procedure APasteExecute(Sender: TObject);
@ -326,6 +332,7 @@ type
FOnOpenReport: TNotifyEvent; FOnOpenReport: TNotifyEvent;
FOnSaveReport: TNotifyEvent; FOnSaveReport: TNotifyEvent;
FReportDesignData : TDesignReportDataManager; FReportDesignData : TDesignReportDataManager;
FImportForm: TForm;
{$IFDEF USEDEMOREPORT} {$IFDEF USEDEMOREPORT}
lReportData : TFPReportUserData; lReportData : TFPReportUserData;
sl: TStringList; sl: TStringList;
@ -345,6 +352,7 @@ type
procedure CheckLoadInitialFile; procedure CheckLoadInitialFile;
function CreateDesignPopupMenu(aOWner: TComponent): TPopupMenu; function CreateDesignPopupMenu(aOWner: TComponent): TPopupMenu;
function CreateNewPage: TFPReportCustomPage; function CreateNewPage: TFPReportCustomPage;
procedure DoImportLog(Sender: TOBject; const Msg: String);
procedure DoPaste(Sender: TObject); procedure DoPaste(Sender: TObject);
procedure DoReportChangedByDesigner(Sender: TObject); procedure DoReportChangedByDesigner(Sender: TObject);
procedure DoSelectionModifiedByOI(Sender: TObject); procedure DoSelectionModifiedByOI(Sender: TObject);
@ -356,6 +364,7 @@ type
procedure ActivateDesignerForElement(AElement: TFPReportElement); procedure ActivateDesignerForElement(AElement: TFPReportElement);
function GetPageCopyAction(aCount: Integer): TPageCopyAction; function GetPageCopyAction(aCount: Integer): TPageCopyAction;
function GetBandCopyAction(aCount: Integer): TBandCopyAction; function GetBandCopyAction(aCount: Integer): TBandCopyAction;
procedure ImportLazReport;
procedure MaybeAddFirstPage; procedure MaybeAddFirstPage;
procedure OpenInNewWindow(aFileName: string); procedure OpenInNewWindow(aFileName: string);
procedure PasteBand(aControl: TFPReportDesignerControl; aAction: TBandCopyAction; var aBand: TFPReportCustomBand); procedure PasteBand(aControl: TFPReportDesignerControl; aAction: TBandCopyAction; var aBand: TFPReportCustomBand);
@ -417,7 +426,7 @@ type
Const Const
AllReportDesignOptions = [rdoManageData,rdoManageVariables,rdoAllowLoad,rdoAllowSave,rdoAllowProperties, AllReportDesignOptions = [rdoManageData,rdoManageVariables,rdoAllowLoad,rdoAllowSave,rdoAllowProperties,
rdoAllowPageAdd,rdoAllowNew, rdoAllowPreview, rdoAllowBands,rdoAllowFileDrop]; rdoAllowPageAdd,rdoAllowNew, rdoAllowPreview, rdoAllowBands,rdoAllowFileDrop,rdoAllowImport];
implementation implementation
@ -429,6 +438,7 @@ uses
fpttf, fpttf,
fpreportstreamer, fpreportstreamer,
fpjson, fpjson,
fplazreport,
Clipbrd, Clipbrd,
jsonparser; jsonparser;
@ -1058,6 +1068,17 @@ begin
Result.StartDesigning; Result.StartDesigning;
end; end;
procedure TFPReportDesignerForm.DoImportLog(Sender: TOBject; const Msg: String);
begin
if not Assigned(FImportForm) and Assigned(ReportImportFormClass) then
begin
FImportForm:=ReportImportFormClass.Create(Self);
FImportForm.Show;
end;
if Assigned(FImportForm) and (FImportForm is TBaseImportReportForm) then
TBaseImportReportForm(FImportForm).Log(Msg);
end;
Function TFPReportDesignerForm.GetPageCopyAction(aCount : Integer) : TPageCopyAction; Function TFPReportDesignerForm.GetPageCopyAction(aCount : Integer) : TPageCopyAction;
Var Var
@ -1532,6 +1553,59 @@ begin
(Sender as TAction).Enabled:=Assigned(CurrentDesigner) and CurrentDesigner.Objects.HaveSelection; (Sender as TAction).Enabled:=Assigned(CurrentDesigner) and CurrentDesigner.Objects.HaveSelection;
end; end;
procedure TFPReportDesignerForm.AImportLazreportExecute(Sender: TObject);
begin
if CheckSaved('import lazreport') then
ImportLazReport;
end;
procedure TFPReportDesignerForm.AImportLazreportUpdate(Sender: TObject);
Const
Ops = [rdoAllowImport,rdoAllowLoad];
begin
(Sender as TAction).Enabled:=(Ops * DesignOptions)=Ops;
end;
Procedure TFPReportDesignerForm.ImportLazReport;
Var
FN,OFN : String;
R : TFPLazReport;
S : TFPReportJSONStreamer;
J : TJSONStringType;
begin
With ODImport do
If Execute then
FN:=FileName
else
exit;
OFN:=ChangeFileExt(FN,'.json');
R:=TFPLazReport.Create(Self);
try
// Reset.
FImportForm:=Nil;
R.OnLog:=@DoImportLog;
R.LoadFromFile(FN);
S:=TFPReportJSONStreamer.Create(Self);
R.WriteElement(S,Nil);
S.JSON.Add('DesignData',TJSONObject.Create);
J:=S.JSON.FormatJSON( );
With TFileStream.Create(OFN,fmCreate) do
try
WriteBuffer(J[1],Length(J));
finally
Free;
end;
finally
R.Free;
end;
LoadReportFromFile(OFN);
DesignReport;
end;
function TFPReportDesignerForm.GetModified: boolean; function TFPReportDesignerForm.GetModified: boolean;
Var Var

View File

@ -0,0 +1,37 @@
object ReportImportLogForm: TReportImportLogForm
Left = 491
Height = 240
Top = 180
Width = 320
Caption = 'Report import log'
ClientHeight = 240
ClientWidth = 320
OnClose = FormClose
Position = poOwnerFormCenter
LCLVersion = '1.9.0.0'
object ButtonPanel1: TButtonPanel
Left = 6
Height = 42
Top = 192
Width = 308
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 0
ShowButtons = [pbClose]
end
object MLog: TMemo
Left = 0
Height = 186
Top = 0
Width = 320
Align = alClient
ScrollBars = ssAutoBoth
TabOrder = 1
end
end

View File

@ -0,0 +1,48 @@
unit frmlazreportimportlog;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls, reportdesignbaseforms;
type
{ TReportImportLogForm }
TForm = Class(TBaseImportReportForm);
TReportImportLogForm = class(TForm)
ButtonPanel1: TButtonPanel;
MLog: TMemo;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
private
public
Procedure Log(Const Msg : String); override;
end;
var
ReportImportLogForm: TReportImportLogForm;
implementation
{$R *.lfm}
{ TReportImportLogForm }
procedure TReportImportLogForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
CloseAction:=caFree;
end;
procedure TReportImportLogForm.Log(Const Msg : String);
begin
MLog.Lines.Add(Msg);
Application.ProcessMessages;
end;
initialization
ReportImportFormClass:=TReportImportLogForm;
end.

View File

@ -11,7 +11,7 @@
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths> </SearchPaths>
</CompilerOptions> </CompilerOptions>
<Files Count="40"> <Files Count="41">
<Item1> <Item1>
<Filename Value="fpreportdesignreportdata.pp"/> <Filename Value="fpreportdesignreportdata.pp"/>
<UnitName Value="fpreportdesignreportdata"/> <UnitName Value="fpreportdesignreportdata"/>
@ -172,6 +172,10 @@
<Filename Value="frmfpreportvariables.lfm"/> <Filename Value="frmfpreportvariables.lfm"/>
<Type Value="LFM"/> <Type Value="LFM"/>
</Item40> </Item40>
<Item41>
<Filename Value="frmlazreportimportlog.pp"/>
<UnitName Value="frmlazreportimportlog"/>
</Item41>
</Files> </Files>
<RequiredPkgs Count="5"> <RequiredPkgs Count="5">
<Item1> <Item1>

View File

@ -12,7 +12,7 @@ uses
frafpreportdbfdata, frafpreportjsondata, frafpreportdata, fraReportObjectInspector, frafpreportsqldbdata, frafpreportdbfdata, frafpreportjsondata, frafpreportdata, fraReportObjectInspector, frafpreportsqldbdata,
frmfpreportalignelements, frmconfigreportdata, frmfpreportdataconnectioneditor, frmfpreportdesignermain, frmfpreportimageedit, frmfpreportalignelements, frmconfigreportdata, frmfpreportdataconnectioneditor, frmfpreportdesignermain, frmfpreportimageedit,
frmfpreportmemoedit, frmfpreportpreviewdata, frmfpreportproperties, frmfpreportshapeedit, frmfpreportvariables, frmfpreportmemoedit, frmfpreportpreviewdata, frmfpreportproperties, frmfpreportshapeedit, frmfpreportvariables,
frmfprdresizeelements, regfpdesigner, FPReportDesigner, LazarusPackageIntf; frmfprdresizeelements, regfpdesigner, FPReportDesigner, frmlazreportimportlog, LazarusPackageIntf;
implementation implementation

View File

@ -11,6 +11,7 @@ uses
sqldb, sqldb,
reportconns, reportconns,
fpreport, fpreport,
fplazreport,
fpreportdb, fpreportdb,
fpreportbarcode, fpreportbarcode,
fpreportqrcode, fpreportqrcode,
@ -42,6 +43,7 @@ uses
frmfpreportvariables, frmfpreportvariables,
frmfpreportproperties, frmfpreportproperties,
frmfpreportpreviewdata, frmfpreportpreviewdata,
frmlazreportimportlog,
cfgfpreportpdfexport, cfgfpreportpdfexport,
cfgfpreportimageexport, cfgfpreportimageexport,
cfgfpreporthtmlexport; cfgfpreporthtmlexport;

View File

@ -21,7 +21,7 @@ interface
uses uses
Classes, SysUtils, fpreport, forms, db, fpreportdesignobjectlist, Classes, SysUtils, fpreport, forms, db, fpreportdesignobjectlist,
fpreportdata, fpreportdesignreportdata; fpreportdata;
Type Type
{ TReportEditorForm } { TReportEditorForm }
@ -110,6 +110,12 @@ Type
end; end;
TBaseReportVariablesFormClass = Class of TBaseReportVariablesForm; TBaseReportVariablesFormClass = Class of TBaseReportVariablesForm;
TBaseImportReportForm = Class(TForm)
Public
Procedure Log(Const Msg : String); virtual; abstract;
end;
TBaseImportReportFormClass = Class of TBaseImportReportForm;
Var Var
ReportDataFormClass : TBaseReportDataFormClass; ReportDataFormClass : TBaseReportDataFormClass;
ReportResizeFormClass : TBaseReportResizeFormClass; ReportResizeFormClass : TBaseReportResizeFormClass;
@ -117,6 +123,7 @@ Var
ReportDataPreviewClass : TBaseReportDataPreviewFormClass; ReportDataPreviewClass : TBaseReportDataPreviewFormClass;
ReportVariablesFormClass : TBaseReportVariablesFormClass; ReportVariablesFormClass : TBaseReportVariablesFormClass;
ReportPropertiesFormClass : TBaseReportEditorFormClass; ReportPropertiesFormClass : TBaseReportEditorFormClass;
ReportImportFormClass : TBaseImportReportFormClass;
implementation implementation