1 { 2 ***************************************************************************** 3 See the file COPYING.modifiedLGPL.txt, included in this distribution, 4 for details about the license. 5 ***************************************************************************** 6 } 7 unit ProjectResourcesIntf; 8 9 {$mode objfpc}{$H+} 10 11 interface 12 13 uses 14 Classes, SysUtils, resource, 15 // IdeIntf 16 CompOptsIntf, ProjectIntf; 17 18 type 19 TAbstractProjectResources = class; 20 21 { TAbstractProjectResource } 22 TAbstractProjectResource = class 23 private 24 FModified: boolean; 25 FOnModified: TNotifyEvent; 26 procedure SetModified(const AValue: boolean); 27 protected 28 // This resource is used when reading project default options. 29 FIsDefaultOption: Boolean; 30 public 31 constructor Create; virtual; 32 33 procedure DoAfterBuild({%H-}AResources: TAbstractProjectResources; {%H-}AReason: TCompileReason; {%H-}SaveToTestDir: boolean); virtual; 34 procedure DoBeforeBuild({%H-}AResources: TAbstractProjectResources; {%H-}AReason: TCompileReason; {%H-}SaveToTestDir: boolean); virtual; UpdateResourcesnull35 function UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; virtual; abstract; 36 procedure WriteToProjectFile(AConfig: {TXMLConfig}TObject; const Path: String); virtual; abstract; 37 procedure ReadFromProjectFile(AConfig: {TXMLConfig}TObject; const Path: String); virtual; abstract; 38 39 property Modified: boolean read FModified write SetModified; 40 property OnModified: TNotifyEvent read FOnModified write FOnModified; 41 property IsDefaultOption: Boolean read FIsDefaultOption; 42 end; 43 44 TAbstractProjectResourceClass = class of TAbstractProjectResource; 45 46 { TAbstractProjectResources } 47 48 TAbstractProjectResources = class 49 private 50 FProject: TLazProject; 51 FResourceType: TResourceType; 52 protected 53 FMessages: TStringList; 54 procedure SetResourceType(const AValue: TResourceType); virtual; GetProjectResourcenull55 function GetProjectResource(AIndex: TAbstractProjectResourceClass): TAbstractProjectResource; virtual; abstract; GetRegisteredResourcesnull56 class function GetRegisteredResources: TList; 57 public 58 constructor Create(AProject: TLazProject); virtual; 59 destructor Destroy; override; 60 61 procedure AddSystemResource(AResource: TAbstractResource); virtual; abstract; 62 procedure AddLazarusResource(AResource: TStream; 63 const AResourceName, AResourceType: String); virtual; abstract; 64 65 property Messages: TStringList read FMessages; 66 property Project: TLazProject read FProject; 67 property ResourceType: TResourceType read FResourceType write SetResourceType; 68 property Resource[AIndex: TAbstractProjectResourceClass]: TAbstractProjectResource read GetProjectResource; default; 69 end; 70 71 procedure RegisterProjectResource(AResource: TAbstractProjectResourceClass); 72 73 implementation 74 75 var 76 FRegisteredProjectResources: TList = nil; 77 78 procedure RegisterProjectResource(AResource: TAbstractProjectResourceClass); 79 begin 80 if FRegisteredProjectResources = nil then 81 FRegisteredProjectResources := TList.Create; 82 FRegisteredProjectResources.Add(AResource); 83 end; 84 85 { TAbstractProjectResource } 86 87 procedure TAbstractProjectResource.SetModified(const AValue: boolean); 88 begin 89 if FModified=AValue then exit; 90 FModified:=AValue; 91 if Assigned(OnModified) then OnModified(Self); 92 end; 93 94 constructor TAbstractProjectResource.Create; 95 begin 96 FModified := False; 97 end; 98 99 procedure TAbstractProjectResource.DoAfterBuild(AResources: TAbstractProjectResources; 100 AReason: TCompileReason; SaveToTestDir: boolean); 101 begin 102 // nothing 103 end; 104 105 procedure TAbstractProjectResource.DoBeforeBuild(AResources: TAbstractProjectResources; 106 AReason: TCompileReason; SaveToTestDir: boolean); 107 begin 108 // nothing 109 end; 110 111 { TAbstractProjectResources } 112 113 procedure TAbstractProjectResources.SetResourceType(const AValue: TResourceType); 114 begin 115 FResourceType := AValue; 116 end; 117 TAbstractProjectResources.GetRegisteredResourcesnull118class function TAbstractProjectResources.GetRegisteredResources: TList; 119 begin 120 Result := FRegisteredProjectResources; 121 end; 122 123 constructor TAbstractProjectResources.Create(AProject: TLazProject); 124 begin 125 inherited Create; 126 FProject := AProject; 127 FMessages := TStringList.Create; 128 end; 129 130 destructor TAbstractProjectResources.Destroy; 131 begin 132 FreeAndNil(FMessages); 133 inherited Destroy; 134 end; 135 136 finalization 137 FRegisteredProjectResources.Free; 138 end. 139