* Complete demos so list of demos can be retrieved as AJAX call

git-svn-id: trunk@37166 -
This commit is contained in:
michael 2017-09-10 15:16:00 +00:00
parent 4bd77800cb
commit d53f3e0526
15 changed files with 181 additions and 9 deletions

View File

@ -14,6 +14,8 @@ uses
type type
{ TColumnsDemo }
TColumnsDemo = class(TReportDemoApp) TColumnsDemo = class(TReportDemoApp)
private private
FDataPage1: TFPReportUserData; FDataPage1: TFPReportUserData;
@ -32,6 +34,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -363,6 +366,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TColumnsDemo.Description: string;
begin
Result:='Demo showing support for multiple columns';
end;
procedure TColumnsDemo.GetReportDataPage2Names(Sender: TObject; List: TStrings); procedure TColumnsDemo.GetReportDataPage2Names(Sender: TObject; List: TStrings);
begin begin
List.Add('p2element'); List.Add('p2element');

View File

@ -44,6 +44,7 @@ type
procedure InitialiseData; override; procedure InitialiseData; override;
Public Public
constructor Create(AOWner :TComponent); override; constructor Create(AOWner :TComponent); override;
Class function Description : string; override;
end; end;
{ TObjectListDemo } { TObjectListDemo }
@ -53,6 +54,7 @@ type
procedure InitialiseData; override; procedure InitialiseData; override;
Public Public
constructor Create(AOWner :TComponent); override; constructor Create(AOWner :TComponent); override;
Class function Description : string; override;
end; end;
@ -101,6 +103,11 @@ begin
TFPReportObjectListData(FReportData).OwnsList:=True; TFPReportObjectListData(FReportData).OwnsList:=True;
end; end;
class function TObjectListDemo.Description: string;
begin
Result:='Demo to show support for object Lists as data loop';
end;
procedure TContnrDemo.CreateReportDesign; procedure TContnrDemo.CreateReportDesign;
var var
@ -244,6 +251,11 @@ begin
TFPReportCollectionData(FReportData).OwnsCollection:=True; TFPReportCollectionData(FReportData).OwnsCollection:=True;
end; end;
class function TCollectionDemo.Description: string;
begin
Result:='Demo showing native support for collections as data loop';
end;
{ TCollectionDemo } { TCollectionDemo }
procedure TCollectionDemo.InitialiseData; procedure TCollectionDemo.InitialiseData;

View File

@ -14,6 +14,9 @@ uses
udapp; udapp;
type type
{ TDatasetDemo }
TDatasetDemo = class(TReportDemoApp) TDatasetDemo = class(TReportDemoApp)
private private
lReportData: TFPReportDatasetData; lReportData: TFPReportDatasetData;
@ -23,6 +26,7 @@ type
procedure InitialiseData; override; procedure InitialiseData; override;
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
Class function Description : string; override;
destructor Destroy; override; destructor Destroy; override;
end; end;
@ -193,6 +197,11 @@ begin
lReportData := TFPReportDatasetData.Create(nil); lReportData := TFPReportDatasetData.Create(nil);
end; end;
class function TDatasetDemo.Description: string;
begin
Result:='Demo showing dataset support';
end;
destructor TDatasetDemo.Destroy; destructor TDatasetDemo.Destroy;
begin begin
FreeAndNil(lReportData); FreeAndNil(lReportData);

View File

@ -30,6 +30,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -253,6 +254,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TExpressionsDemo.Description: string;
begin
Result:='Demo with expressions in Memos';
end;
end. end.

View File

@ -13,6 +13,8 @@ uses
type type
{ TFramesDemo }
TFramesDemo = class(TReportDemoApp) TFramesDemo = class(TReportDemoApp)
private private
lReportData: TFPReportUserData; lReportData: TFPReportUserData;
@ -28,6 +30,7 @@ type
public public
constructor Create(AOwner : TComponent) ; override; constructor Create(AOwner : TComponent) ; override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -293,6 +296,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TFramesDemo.Description: string;
begin
Result:='Demo showing frames around elements';
end;
end. end.

View File

@ -13,6 +13,8 @@ uses
type type
{ TGroupingDemo }
TGroupingDemo = class(TReportDemoApp) TGroupingDemo = class(TReportDemoApp)
private private
lReportData: TFPReportUserData; lReportData: TFPReportUserData;
@ -29,6 +31,7 @@ type
public public
constructor Create(AOWner :TComponent); override; constructor Create(AOWner :TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -260,5 +263,10 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TGroupingDemo.Description: string;
begin
Result:='Demo showing grouping';
end;
end. end.

View File

@ -12,6 +12,9 @@ uses
udapp; udapp;
type type
{ TImagesDemo }
TImagesDemo = class(TReportDemoApp) TImagesDemo = class(TReportDemoApp)
private private
lReportData: TFPReportUserData; lReportData: TFPReportUserData;
@ -24,6 +27,7 @@ type
public public
constructor Create(AOWner : TComponent); override; constructor Create(AOWner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
procedure GetReportDataNames(Sender: TObject; List: TStrings); procedure GetReportDataNames(Sender: TObject; List: TStrings);
end; end;
@ -234,6 +238,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TImagesDemo.Description: string;
begin
Result:='Demo showing image support';
end;
procedure TImagesDemo.GetReportDataNames(Sender: TObject; List: TStrings); procedure TImagesDemo.GetReportDataNames(Sender: TObject; List: TStrings);
begin begin
List.Add('country'); List.Add('country');

View File

@ -14,6 +14,8 @@ uses
type type
{ TJSONDemo }
TJSONDemo = class(TReportDemoApp) TJSONDemo = class(TReportDemoApp)
private private
FReportData : TFPReportJSONData; FReportData : TFPReportJSONData;
@ -25,6 +27,7 @@ type
public public
constructor Create(AOWner :TComponent); override; constructor Create(AOWner :TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -187,5 +190,10 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TJSONDemo.Description: string;
begin
Result:='Demo of native JSON data support';
end;
end. end.

View File

@ -13,6 +13,9 @@ uses
udapp; udapp;
type type
{ TMasterDetailDemo }
TMasterDetailDemo = class(TReportDemoApp) TMasterDetailDemo = class(TReportDemoApp)
private private
FMasterData: TFPReportUserData; FMasterData: TFPReportUserData;
@ -41,6 +44,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -315,6 +319,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TMasterDetailDemo.Description: string;
begin
Result:='Demo of Master/Detail data loop support';
end;
end. end.

View File

@ -18,6 +18,8 @@ uses
type type
{ TMasterDetailDatasetDemo }
TMasterDetailDatasetDemo = class(TReportDemoApp) TMasterDetailDatasetDemo = class(TReportDemoApp)
private private
IBConnection1: TIBConnection; IBConnection1: TIBConnection;
@ -35,6 +37,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -340,6 +343,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TMasterDetailDatasetDemo.Description: string;
begin
Result:='Demo for support of master-detail relations with datasets';
end;
end. end.

View File

@ -16,6 +16,9 @@ uses
udapp; udapp;
type type
{ TShapesDemo }
TShapesDemo = class(TReportDemoApp) TShapesDemo = class(TReportDemoApp)
private private
lReportData: TFPReportUserData; lReportData: TFPReportUserData;
@ -29,6 +32,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -222,6 +226,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TShapesDemo.Description: string;
begin
Result:='Demo showing support for shapes';
end;
end. end.

View File

@ -13,6 +13,9 @@ uses
udapp; udapp;
type type
{ TSimpleListDemo }
TSimpleListDemo = class(TReportDemoApp) TSimpleListDemo = class(TReportDemoApp)
private private
lReportData: TFPReportUserData; lReportData: TFPReportUserData;
@ -27,6 +30,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -185,6 +189,11 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TSimpleListDemo.Description: string;
begin
Result:='Simple list of countries';
end;
end. end.

View File

@ -15,6 +15,9 @@ uses
udapp; udapp;
type type
{ TTTFDemo }
TTTFDemo = class(TReportDemoApp) TTTFDemo = class(TReportDemoApp)
private private
lReportData: TFPReportUserData; lReportData: TFPReportUserData;
@ -29,6 +32,7 @@ type
public public
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
destructor Destroy; override; destructor Destroy; override;
Class function Description : string; override;
end; end;
@ -231,5 +235,10 @@ begin
inherited Destroy; inherited Destroy;
end; end;
class function TTTFDemo.Description: string;
begin
Result:='Demo showing TrueType Font support';
end;
end. end.

View File

@ -53,6 +53,7 @@ Type
procedure InitialiseData; virtual; procedure InitialiseData; virtual;
procedure CreateReportDesign; virtual; procedure CreateReportDesign; virtual;
public public
Class Function Description : string; virtual;
// procedure DoCreateJSON(const AFileName: String; RunTime: Boolean=False); // procedure DoCreateJSON(const AFileName: String; RunTime: Boolean=False);
Property rpt : TFPReport read Frpt Write FRpt; Property rpt : TFPReport read Frpt Write FRpt;
end; end;
@ -113,7 +114,12 @@ Type
Class Function FormatName(F : TRenderFormat) : String; Class Function FormatName(F : TRenderFormat) : String;
end; end;
{ TReportDef }
TReportDef = Class
ReportClass: TReportDemoAppClass;
Constructor create(AClass : TReportDemoAppClass);
end;
implementation implementation
@ -138,6 +144,11 @@ begin
PaperManager.RegisterStandardSizes; PaperManager.RegisterStandardSizes;
end; end;
class function TReportDemoApp.Description: string;
begin
Result:='';
end;
class function TReportDemoApplication.GetRenderClass(F: TRenderFormat class function TReportDemoApplication.GetRenderClass(F: TRenderFormat
): TFPReportExporterClass; ): TFPReportExporterClass;
@ -359,13 +370,7 @@ begin
end; end;
end; end;
Type
{ TReportDef }
TReportDef = Class
ReportClass: TReportDemoAppClass;
Constructor create(AClass : TReportDemoAppClass);
end;
{ TReportDef } { TReportDef }

View File

@ -55,6 +55,13 @@ Type
Procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override; Procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
end; end;
{ TReportListModule }
TReportListModule = class(TCustomHTTPModule)
Public
Procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
end;
implementation implementation
@ -73,6 +80,7 @@ uses
fppdf, fppdf,
fpreportpdfexport, fpreportpdfexport,
{$ENDIF} {$ENDIF}
fpjson,
fpmimetypes; fpmimetypes;
Type Type
@ -108,6 +116,45 @@ Type
Var Counter : Integer; Var Counter : Integer;
{ TReportListModule }
procedure TReportListModule.HandleRequest(ARequest: TRequest; AResponse: TResponse);
Var
O,RO : TJSONObject;
A : TJSONArray;
L : TStrings;
I : integer;
R : TReportDef;
S,D : String;
begin
L:=Nil;
A:=Nil;
O:=TJSONObject.Create();
try
A:=TJSONArray.Create;
O.Add('data',A);
L:=TStringList.Create;
TReportDemoApplication.GetRegisteredReports(L);
For I:=0 to L.Count-1 do
begin
R:=TReportDef(L.Objects[i]);
D:=R.ReportClass.Description;
S:=L[i];
if D='' then D:=S;
A.Add(TJSONObject.Create(['name',S,'description',D]));
end;
AResponse.ContentType:='application/json';
AResponse.Content:=O.AsJSON;
AResponse.ContentLength:=Length(AResponse.Content);
AResponse.SendContent;
finally
L.Free;
O.Free;
end;
end;
{ TViewReportModule } { TViewReportModule }
procedure TViewReportModule.HandleRequest(ARequest: TRequest; procedure TViewReportModule.HandleRequest(ARequest: TRequest;
@ -420,12 +467,18 @@ Var
Fmt : TRenderFormat; Fmt : TRenderFormat;
FRunner : TReportRunner; FRunner : TReportRunner;
RC : TFPReportExporterClass; RC : TFPReportExporterClass;
Flds : TStrings;
begin begin
D:=ARequest.ContentFields.Values['demo']; if SameText(ARequest.Method,'GET') then
flds:=ARequest.QueryFields
else
flds:=ARequest.ContentFields;
flds.SaveToFile('/tmp/vars.txt');
D:=Flds.Values['demo'];
if (D='') or (TReportDemoApplication.GetReportClass(D)=Nil) then if (D='') or (TReportDemoApplication.GetReportClass(D)=Nil) then
Raise Exception.CreateFmt('Invalid or empty demo name : "%s"',[D]); Raise Exception.CreateFmt('Invalid or empty demo name : "%s"',[D]);
F:=ARequest.ContentFields.Values['format']; F:=flds.Values['format'];
Fmt:=High(TRenderFormat); Fmt:=High(TRenderFormat);
While (fmt>rfDefault) and (CompareText(TReportDemoApplication.FormatName(fmt),F)<>0) do While (fmt>rfDefault) and (CompareText(TReportDemoApplication.FormatName(fmt),F)<>0) do
fmt:=Pred(fmt); fmt:=Pred(fmt);
@ -442,7 +495,7 @@ begin
FN:=D+IntToStr(Counter); FN:=D+IntToStr(Counter);
FN:=FN+PathDelim+FN+RC.DefaultExtension; FN:=FN+PathDelim+FN+RC.DefaultExtension;
FRunner.BaseOutputFileName:=GetTempDir+FN; FRunner.BaseOutputFileName:=GetTempDir+FN;
Conf:= TReportConfigurator.Create(ARequest.ContentFields); Conf:= TReportConfigurator.Create(flds);
Try Try
FRunner.OnInitExporter:=@Conf.ConfigReport; FRunner.OnInitExporter:=@Conf.ConfigReport;
FRunner.Execute; FRunner.Execute;
@ -698,10 +751,12 @@ begin
end; end;
end; end;
initialization initialization
TPageReportModule.RegisterModule('Page',True); TPageReportModule.RegisterModule('Page',True);
TGenerateReportModule.RegisterModule('Generate',True); TGenerateReportModule.RegisterModule('Generate',True);
TViewReportModule.RegisterModule('View',True); TViewReportModule.RegisterModule('View',True);
TReportListModule.RegisterModule('ReportList',True);
HTTPRouter.RegisterRoute('/*',@ShowPage,true); HTTPRouter.RegisterRoute('/*',@ShowPage,true);
end. end.