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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -55,6 +55,13 @@ Type
Procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
end;
{ TReportListModule }
TReportListModule = class(TCustomHTTPModule)
Public
Procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
end;
implementation
@ -73,6 +80,7 @@ uses
fppdf,
fpreportpdfexport,
{$ENDIF}
fpjson,
fpmimetypes;
Type
@ -108,6 +116,45 @@ Type
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 }
procedure TViewReportModule.HandleRequest(ARequest: TRequest;
@ -420,12 +467,18 @@ Var
Fmt : TRenderFormat;
FRunner : TReportRunner;
RC : TFPReportExporterClass;
Flds : TStrings;
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
Raise Exception.CreateFmt('Invalid or empty demo name : "%s"',[D]);
F:=ARequest.ContentFields.Values['format'];
F:=flds.Values['format'];
Fmt:=High(TRenderFormat);
While (fmt>rfDefault) and (CompareText(TReportDemoApplication.FormatName(fmt),F)<>0) do
fmt:=Pred(fmt);
@ -442,7 +495,7 @@ begin
FN:=D+IntToStr(Counter);
FN:=FN+PathDelim+FN+RC.DefaultExtension;
FRunner.BaseOutputFileName:=GetTempDir+FN;
Conf:= TReportConfigurator.Create(ARequest.ContentFields);
Conf:= TReportConfigurator.Create(flds);
Try
FRunner.OnInitExporter:=@Conf.ConfigReport;
FRunner.Execute;
@ -698,10 +751,12 @@ begin
end;
end;
initialization
TPageReportModule.RegisterModule('Page',True);
TGenerateReportModule.RegisterModule('Generate',True);
TViewReportModule.RegisterModule('View',True);
TReportListModule.RegisterModule('ReportList',True);
HTTPRouter.RegisterRoute('/*',@ShowPage,true);
end.