lazarus/components/buildintf/projectresourcesintf.pas
mattias a472e9ef09 buildintf: split from ideintf
git-svn-id: trunk@62795 -
2020-03-22 11:58:11 +00:00

139 lines
4.2 KiB
ObjectPascal

{
*****************************************************************************
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
unit ProjectResourcesIntf;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, resource,
// BuildIntf
CompOptsIntf, ProjectIntf;
type
TAbstractProjectResources = class;
{ TAbstractProjectResource }
TAbstractProjectResource = class
private
FModified: boolean;
FOnModified: TNotifyEvent;
procedure SetModified(const AValue: boolean);
protected
// This resource is used when reading project default options.
FIsDefaultOption: Boolean;
public
constructor Create; virtual;
procedure DoAfterBuild({%H-}AResources: TAbstractProjectResources; {%H-}AReason: TCompileReason; {%H-}SaveToTestDir: boolean); virtual;
procedure DoBeforeBuild({%H-}AResources: TAbstractProjectResources; {%H-}AReason: TCompileReason; {%H-}SaveToTestDir: boolean); virtual;
function UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; virtual; abstract;
procedure WriteToProjectFile(AConfig: {TXMLConfig}TObject; const Path: String); virtual; abstract;
procedure ReadFromProjectFile(AConfig: {TXMLConfig}TObject; const Path: String); virtual; abstract;
property Modified: boolean read FModified write SetModified;
property OnModified: TNotifyEvent read FOnModified write FOnModified;
property IsDefaultOption: Boolean read FIsDefaultOption;
end;
TAbstractProjectResourceClass = class of TAbstractProjectResource;
{ TAbstractProjectResources }
TAbstractProjectResources = class
private
FProject: TLazProject;
FResourceType: TResourceType;
protected
FMessages: TStringList;
procedure SetResourceType(const AValue: TResourceType); virtual;
function GetProjectResource(AIndex: TAbstractProjectResourceClass): TAbstractProjectResource; virtual; abstract;
class function GetRegisteredResources: TList;
public
constructor Create(AProject: TLazProject); virtual;
destructor Destroy; override;
procedure AddSystemResource(AResource: TAbstractResource); virtual; abstract;
procedure AddLazarusResource(AResource: TStream;
const AResourceName, AResourceType: String); virtual; abstract;
property Messages: TStringList read FMessages;
property Project: TLazProject read FProject;
property ResourceType: TResourceType read FResourceType write SetResourceType;
property Resource[AIndex: TAbstractProjectResourceClass]: TAbstractProjectResource read GetProjectResource; default;
end;
procedure RegisterProjectResource(AResource: TAbstractProjectResourceClass);
implementation
var
FRegisteredProjectResources: TList = nil;
procedure RegisterProjectResource(AResource: TAbstractProjectResourceClass);
begin
if FRegisteredProjectResources = nil then
FRegisteredProjectResources := TList.Create;
FRegisteredProjectResources.Add(AResource);
end;
{ TAbstractProjectResource }
procedure TAbstractProjectResource.SetModified(const AValue: boolean);
begin
if FModified=AValue then exit;
FModified:=AValue;
if Assigned(OnModified) then OnModified(Self);
end;
constructor TAbstractProjectResource.Create;
begin
FModified := False;
end;
procedure TAbstractProjectResource.DoAfterBuild(AResources: TAbstractProjectResources;
AReason: TCompileReason; SaveToTestDir: boolean);
begin
// nothing
end;
procedure TAbstractProjectResource.DoBeforeBuild(AResources: TAbstractProjectResources;
AReason: TCompileReason; SaveToTestDir: boolean);
begin
// nothing
end;
{ TAbstractProjectResources }
procedure TAbstractProjectResources.SetResourceType(const AValue: TResourceType);
begin
FResourceType := AValue;
end;
class function TAbstractProjectResources.GetRegisteredResources: TList;
begin
Result := FRegisteredProjectResources;
end;
constructor TAbstractProjectResources.Create(AProject: TLazProject);
begin
inherited Create;
FProject := AProject;
FMessages := TStringList.Create;
end;
destructor TAbstractProjectResources.Destroy;
begin
FreeAndNil(FMessages);
inherited Destroy;
end;
finalization
FRegisteredProjectResources.Free;
end.