File: lr_previewtoolsabstract.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (141 lines) | stat: -rw-r--r-- 3,232 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
{*****************************************}
{                                         }
{             LazReport                   }
{             LazReport export filter     }
{                                         }
{  Copyright (c) 2014 by Lagunov A.A.     }
{                                         }
{*****************************************}

unit lr_PreviewToolsAbstract;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LR_Class;

type
  TlrPreviewToolsAbstract = class;

  TlrPreviewToolsSetupEvent = procedure(Sender:TlrPreviewToolsAbstract; var StopExec: boolean) of object;

  { TlrPreviewToolsAbstract }

  TlrPreviewToolsAbstract = class(TComponent)
  private
    FOnSetup: TlrPreviewToolsSetupEvent;
    function GetActive: boolean;
    procedure SetActive(AValue: boolean);
  protected
    FCaption: string;
    FDoc: TfrReport;
    procedure DoSetupEvent(var ContinueExec: boolean);
    function ProcessSetup:boolean; virtual;
    function ProcessTool:boolean; virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Execute(ADoc:TfrReport);
  published
    property Active:boolean read GetActive write SetActive;
    property Caption: string read FCaption write FCaption;
    property OnSetup:TlrPreviewToolsSetupEvent read FOnSetup write FOnSetup;
  end;

procedure RegisterLRExportFilter(AFilter:TlrPreviewToolsAbstract);
procedure UnRegisterLRExportFilter(AFilter:TlrPreviewToolsAbstract);
var
  lrExportFilters : TList = nil;

implementation

procedure RegisterLRExportFilter(AFilter: TlrPreviewToolsAbstract);
var
  i: Integer;
begin
  for i:=0 to lrExportFilters.Count - 1 do
    if TlrPreviewToolsAbstract(lrExportFilters[i]) = AFilter then
      exit;

  lrExportFilters.Add(AFilter);
end;

procedure UnRegisterLRExportFilter(AFilter: TlrPreviewToolsAbstract);
var
  i: Integer;
begin
  i:=lrExportFilters.IndexOf(AFilter);
  if i>=0 then
    lrExportFilters.Delete(i);
end;

{ TlrPreviewToolsAbstract }

procedure TlrPreviewToolsAbstract.SetActive(AValue: boolean);
begin
  if AValue then
    RegisterLRExportFilter(Self)
  else
    UnRegisterLRExportFilter(Self);
end;

function TlrPreviewToolsAbstract.GetActive: boolean;
begin
  Result:=lrExportFilters.IndexOf(Self)>-1;
end;

procedure TlrPreviewToolsAbstract.DoSetupEvent(var ContinueExec: boolean);
begin
  if Assigned(FOnSetup) then
    FOnSetup(Self, ContinueExec);
end;

function TlrPreviewToolsAbstract.ProcessSetup: boolean;
begin
  Result:=true;
  DoSetupEvent(Result);
end;

function TlrPreviewToolsAbstract.ProcessTool: boolean;
begin
  Result:=false;
end;

constructor TlrPreviewToolsAbstract.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  RegisterLRExportFilter(Self);
  FCaption:=ClassName;
end;

destructor TlrPreviewToolsAbstract.Destroy;
begin
  UnRegisterLRExportFilter(Self);
  inherited Destroy;
end;

procedure TlrPreviewToolsAbstract.Execute(ADoc: TfrReport);
begin
  FDoc:=ADoc;
  try
    if ProcessSetup then
       ProcessTool;
  finally
    FDoc:=nil;
  end;
end;


procedure DoFreeExportFilters;
begin
  FreeAndNil(lrExportFilters);
end;

initialization
  lrExportFilters :=TList.Create;
finalization
  DoFreeExportFilters;
end.