projectgroups: add handler RnLazbuild

This commit is contained in:
mattias 2022-04-18 00:14:05 +02:00
parent 361b7db393
commit 118216fc3d
2 changed files with 103 additions and 1 deletions

View File

@ -13,7 +13,7 @@ uses
// LazUtils // LazUtils
LazFileUtils, LazFileCache, LazMethodList, LazLoggerBase, LazFileUtils, LazFileCache, LazMethodList, LazLoggerBase,
// IdeIntf // IdeIntf
PackageIntf, ProjectIntf; PackageIntf, ProjectIntf, IDEExternToolIntf;
Type Type
TPGTargetType = ( TPGTargetType = (
@ -81,6 +81,7 @@ Type
protected protected
FParent: TPGCompileTarget; FParent: TPGCompileTarget;
FProjectGroup: TProjectGroup; FProjectGroup: TProjectGroup;
function CallRunLazbuildHandlers(Tool: TAbstractExternalTool): boolean; virtual;
function GetAllowedActions: TPGTargetActions; virtual; // By default, return all allowed actions for target type. function GetAllowedActions: TPGTargetActions; virtual; // By default, return all allowed actions for target type.
function GetBuildModeCount: integer; virtual; abstract; function GetBuildModeCount: integer; virtual; abstract;
function GetBuildModes(Index: integer): TPGBuildMode; virtual; abstract; function GetBuildModes(Index: integer): TPGBuildMode; virtual; abstract;
@ -143,6 +144,8 @@ Type
protected protected
FSelfTarget: TPGCompileTarget; FSelfTarget: TPGCompileTarget;
FParent: TProjectGroup; FParent: TProjectGroup;
function CallRunLazbuildHandlers(Target: TPGCompileTarget;
Tool: TAbstractExternalTool): boolean; virtual;
procedure SetFileName(AValue: String); virtual; procedure SetFileName(AValue: String); virtual;
function GetModified: Boolean; virtual; function GetModified: Boolean; virtual;
function GetTargetCount: Integer; virtual; abstract; function GetTargetCount: Integer; virtual; abstract;
@ -201,13 +204,27 @@ Type
); );
TProjectGroupLoadOptions = set of TProjectGroupLoadOption; TProjectGroupLoadOptions = set of TProjectGroupLoadOption;
TPGManagerHandler = (
pgmhRunLazbuild // called before running lazbuild
);
TPGManagerHandlers = set of TPGManagerHandler;
TPGMRunLazbuildEvent = function(Target: TPGCompileTarget;
Tool: TAbstractExternalTool): boolean of object; // false = abort
{ TProjectGroupManager } { TProjectGroupManager }
TProjectGroupManager = Class(TPersistent) TProjectGroupManager = Class(TPersistent)
private
FHandlers: array[TPGManagerHandler] of TMethodList;
protected protected
FEditor: TForm; FEditor: TForm;
function CallRunLazbuildHandlers(Target: TPGCompileTarget;
Tool: TAbstractExternalTool): boolean; virtual;
function GetCurrentProjectGroup: TProjectGroup; virtual; abstract; function GetCurrentProjectGroup: TProjectGroup; virtual; abstract;
public public
constructor Create;
destructor Destroy; override;
function NewProjectGroup(AddActiveProject: boolean): boolean; virtual; abstract; function NewProjectGroup(AddActiveProject: boolean): boolean; virtual; abstract;
function LoadProjectGroup(AFileName: string; AOptions: TProjectGroupLoadOptions): boolean; virtual; abstract; function LoadProjectGroup(AFileName: string; AOptions: TProjectGroupLoadOptions): boolean; virtual; abstract;
function SaveProjectGroup: boolean; virtual; abstract; function SaveProjectGroup: boolean; virtual; abstract;
@ -218,6 +235,11 @@ Type
procedure Redo; virtual; abstract; procedure Redo; virtual; abstract;
property CurrentProjectGroup: TProjectGroup Read GetCurrentProjectGroup; // Always top-level. property CurrentProjectGroup: TProjectGroup Read GetCurrentProjectGroup; // Always top-level.
property Editor: TForm read FEditor write FEditor; property Editor: TForm read FEditor write FEditor;
public
// handlers
procedure RemoveAllHandlersOfObject(AnObject: TObject);
procedure AddHandlerOnRunLazbuild(const OnRunLazbuild: TPGMRunLazbuildEvent; AsLast: boolean = false);
procedure RemoveHandlerOnRunLazbuild(const OnRunLazbuild: TPGMRunLazbuildEvent);
end; end;
var var
@ -267,6 +289,60 @@ begin
Result:=AAction in [taCompile,taCompileClean]; Result:=AAction in [taCompile,taCompileClean];
end; end;
{ TProjectGroupManager }
function TProjectGroupManager.CallRunLazbuildHandlers(Target: TPGCompileTarget;
Tool: TAbstractExternalTool): boolean;
var
Handler: TMethodList;
i: Integer;
begin
Result:=true;
Handler:=FHandlers[pgmhRunLazbuild];
i:=Handler.Count;
while Handler.NextDownIndex(i) do begin
if not TPGMRunLazbuildEvent(Handler[i])(Target,Tool) then
exit(false);
end;
end;
constructor TProjectGroupManager.Create;
var
HandlerType: TPGManagerHandler;
begin
for HandlerType in TPGManagerHandler do
FHandlers[HandlerType]:=TMethodList.Create;
end;
destructor TProjectGroupManager.Destroy;
var
HandlerType: TPGManagerHandler;
begin
for HandlerType in TPGManagerHandler do
FreeAndNil(FHandlers[HandlerType]);
inherited Destroy;
end;
procedure TProjectGroupManager.RemoveAllHandlersOfObject(AnObject: TObject);
var
HandlerType: TPGManagerHandler;
begin
for HandlerType in TPGManagerHandler do
FHandlers[HandlerType].RemoveAllMethodsOfObject(AnObject);
end;
procedure TProjectGroupManager.AddHandlerOnRunLazbuild(
const OnRunLazbuild: TPGMRunLazbuildEvent; AsLast: boolean);
begin
FHandlers[pgmhRunLazbuild].Add(TMethod(OnRunLazbuild),AsLast);
end;
procedure TProjectGroupManager.RemoveHandlerOnRunLazbuild(
const OnRunLazbuild: TPGMRunLazbuildEvent);
begin
FHandlers[pgmhRunLazbuild].Remove(TMethod(OnRunLazbuild));
end;
{ TPGBuildMode } { TPGBuildMode }
procedure TPGBuildMode.SetCompile(AValue: boolean); procedure TPGBuildMode.SetCompile(AValue: boolean);
@ -303,6 +379,15 @@ begin
FLastSavedChangeStamp:=FChangeStamp; FLastSavedChangeStamp:=FChangeStamp;
end; end;
function TProjectGroup.CallRunLazbuildHandlers(Target: TPGCompileTarget;
Tool: TAbstractExternalTool): boolean;
begin
if ProjectGroupManager<>nil then
Result:=ProjectGroupManager.CallRunLazbuildHandlers(Target,Tool)
else
Result:=true;
end;
procedure TProjectGroup.SetFileName(AValue: String); procedure TProjectGroup.SetFileName(AValue: String);
begin begin
if FFileName=AValue then Exit; if FFileName=AValue then Exit;
@ -457,6 +542,18 @@ begin
Result:=Group.IndexOfTarget(Self); Result:=Group.IndexOfTarget(Self);
end; end;
function TPGCompileTarget.CallRunLazbuildHandlers(Tool: TAbstractExternalTool
): boolean;
var
Group: TProjectGroup;
begin
Group:=GetOwnerProjectGroup;
if Group<>nil then
Result:=Group.CallRunLazbuildHandlers(Self,Tool)
else
Result:=true;
end;
function TPGCompileTarget.GetAllowedActions: TPGTargetActions; function TPGCompileTarget.GetAllowedActions: TPGTargetActions;
begin begin
Result:=PGTargetActions[TargetType]; Result:=PGTargetActions[TargetType];

View File

@ -603,6 +603,7 @@ end;
constructor TIDEProjectGroupManager.Create; constructor TIDEProjectGroupManager.Create;
begin begin
inherited Create;
FOptions:=TIDEProjectGroupOptions.Create; FOptions:=TIDEProjectGroupOptions.Create;
FUndoList:=TObjectList.Create(true); FUndoList:=TObjectList.Create(true);
FRedoList:=TObjectList.Create(true); FRedoList:=TObjectList.Create(true);
@ -1547,6 +1548,10 @@ begin
//and (AProject.MainFilename<>'') then //and (AProject.MainFilename<>'') then
// FPCParser.FilesToIgnoreUnitNotUsed.Add(AProject.MainFilename); // FPCParser.FilesToIgnoreUnitNotUsed.Add(AProject.MainFilename);
Tool.AddParsers(SubToolMake); Tool.AddParsers(SubToolMake);
if not CallRunLazbuildHandlers(Tool) then
exit(arFailed);
DebugLn(['CompileUsingLazBuild: Calling "', LazBuildFilename, '" with parameters']); DebugLn(['CompileUsingLazBuild: Calling "', LazBuildFilename, '" with parameters']);
Params.Delimiter:=' '; Params.Delimiter:=' ';
DebugLn([' ', Params.DelimitedText]); DebugLn([' ', Params.DelimitedText]);