mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-02 05:00:01 +01:00
project groups: removed GetLazProject/Package
git-svn-id: trunk@50359 -
This commit is contained in:
parent
c97a53a9ba
commit
cb2ab87cd6
@ -41,10 +41,13 @@ Modified LGPL-2."/>
|
||||
<UnitName Value="ProjectGroupStrConst"/>
|
||||
</Item6>
|
||||
</Files>
|
||||
<RequiredPkgs Count="1">
|
||||
<RequiredPkgs Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="IDEIntf"/>
|
||||
<PackageName Value="CodeTools"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="IDEIntf"/>
|
||||
</Item2>
|
||||
</RequiredPkgs>
|
||||
<UsageOptions>
|
||||
<UnitPath Value="$(PkgOutDir)"/>
|
||||
|
||||
@ -13,28 +13,31 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, contnrs,
|
||||
Laz2_XMLCfg,
|
||||
Controls, Forms, Dialogs, LazFileUtils, LazFileCache,
|
||||
Controls, Forms, Dialogs, LCLProc, LazFileUtils, LazFileCache,
|
||||
PackageIntf, ProjectIntf, MenuIntf,
|
||||
LazIDEIntf, IDEDialogs, CompOptsIntf, ProjectGroupIntf,
|
||||
ProjectGroupStrConst;
|
||||
ProjectGroupStrConst, FileProcs;
|
||||
|
||||
|
||||
type
|
||||
|
||||
{ TIDECompileTarget }
|
||||
|
||||
TIDECompileTarget = class(TCompileTarget)
|
||||
TIDECompileTarget = class(TPGCompileTarget)
|
||||
private
|
||||
FTarget: TPersistent;
|
||||
FFiles: TStringList;
|
||||
FRequiredPackages: TObjectList; // list of TPGDependency
|
||||
protected
|
||||
function GetFileCount: integer; override;
|
||||
function GetFiles(Index: integer): string; override;
|
||||
function GetRequiredPackageCount: integer; override;
|
||||
function GetRequiredPackages(Index: integer): TPGDependency; override;
|
||||
procedure LoadPackage;
|
||||
procedure LoadProject;
|
||||
procedure LoadProjectGroup;
|
||||
function ProjectAction(AAction: TPGTargetAction): TPGActionResult;
|
||||
function PackageAction(AAction: TPGTargetAction): TPGActionResult;
|
||||
function ProjectGroupAction(AAction: TPGTargetAction): TPGActionResult;
|
||||
function GetIDEPackage: TIDEPackage; override;
|
||||
function GetLazProject: TLazProject; override;
|
||||
function GetProjectGroup: TProjectGroup; override;
|
||||
function PerformAction(AAction: TPGTargetAction): TPGActionResult; override;
|
||||
public
|
||||
@ -54,8 +57,8 @@ type
|
||||
constructor Create(AProjectGroup: TProjectGroup);
|
||||
end;
|
||||
|
||||
TTargetEvent = procedure(Sender: TObject; Target: TCompileTarget) of object;
|
||||
TTargetExchangeEvent = procedure(Sender: TObject; Target1,Target2: TCompileTarget) of object; // ToDo: use index
|
||||
TTargetEvent = procedure(Sender: TObject; Target: TPGCompileTarget) of object;
|
||||
TTargetExchangeEvent = procedure(Sender: TObject; Target1,Target2: TPGCompileTarget) of object; // ToDo: use index
|
||||
|
||||
{ TIDEProjectGroup }
|
||||
|
||||
@ -70,19 +73,19 @@ type
|
||||
FRemovedTargets: TFPObjectList;
|
||||
protected
|
||||
procedure SetFileName(AValue: String); override;
|
||||
function GetTarget(Index: Integer): TCompileTarget; override;
|
||||
function GetTarget(Index: Integer): TPGCompileTarget; override;
|
||||
function GetTargetCount: Integer; override;
|
||||
function GetRemovedTargetCount: Integer; override;
|
||||
function GetRemovedTarget(Index: Integer): TCompileTarget; override;
|
||||
function GetRemovedTarget(Index: Integer): TPGCompileTarget; override;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function IndexOfTarget(const Target: TCompileTarget): Integer; override;
|
||||
function IndexOfRemovedTarget(const Target: TCompileTarget): Integer; override;
|
||||
function AddTarget(Const AFileName: String): TCompileTarget; override;
|
||||
function IndexOfTarget(const Target: TPGCompileTarget): Integer; override;
|
||||
function IndexOfRemovedTarget(const Target: TPGCompileTarget): Integer; override;
|
||||
function AddTarget(Const AFileName: String): TPGCompileTarget; override;
|
||||
procedure RemoveTarget(Index: Integer); override;
|
||||
procedure ExchangeTargets(ASource, ATarget: Integer); override; // ToDo: replace with MoveTarget
|
||||
procedure ActivateTarget(T: TCompileTarget); override;
|
||||
procedure ActivateTarget(T: TPGCompileTarget); override;
|
||||
function LoadFromFile(Options: TProjectGroupLoadOptions): Boolean;
|
||||
function SaveToFile: Boolean;
|
||||
property OnFileNameChange: TNotifyEvent Read FOnFileNameChange Write FOnFileNameChange;
|
||||
@ -325,9 +328,9 @@ begin
|
||||
FOnFileNameChange(Self);
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.GetTarget(Index: Integer): TCompileTarget;
|
||||
function TIDEProjectGroup.GetTarget(Index: Integer): TPGCompileTarget;
|
||||
begin
|
||||
Result:=TCompileTarget(FTargets[Index]);
|
||||
Result:=TPGCompileTarget(FTargets[Index]);
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.GetTargetCount: Integer;
|
||||
@ -340,9 +343,9 @@ begin
|
||||
Result:=FRemovedTargets.Count;
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.GetRemovedTarget(Index: Integer): TCompileTarget;
|
||||
function TIDEProjectGroup.GetRemovedTarget(Index: Integer): TPGCompileTarget;
|
||||
begin
|
||||
Result:=TCompileTarget(FRemovedTargets[Index]);
|
||||
Result:=TPGCompileTarget(FRemovedTargets[Index]);
|
||||
end;
|
||||
|
||||
constructor TIDEProjectGroup.Create;
|
||||
@ -359,34 +362,34 @@ begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.IndexOfTarget(const Target: TCompileTarget): Integer;
|
||||
function TIDEProjectGroup.IndexOfTarget(const Target: TPGCompileTarget): Integer;
|
||||
begin
|
||||
Result:=FTargets.IndexOf(Target);
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.IndexOfRemovedTarget(const Target: TCompileTarget
|
||||
function TIDEProjectGroup.IndexOfRemovedTarget(const Target: TPGCompileTarget
|
||||
): Integer;
|
||||
begin
|
||||
Result:=FRemovedTargets.IndexOf(Target);
|
||||
end;
|
||||
|
||||
function TIDEProjectGroup.AddTarget(const AFileName: String): TCompileTarget;
|
||||
function TIDEProjectGroup.AddTarget(const AFileName: String): TPGCompileTarget;
|
||||
begin
|
||||
Result:=Nil;
|
||||
if FileExistsCached(AFileName) then
|
||||
begin
|
||||
Result:=TIDECompileTarget.Create;
|
||||
Result.FileName:=AFileName;
|
||||
FTargets.Add(Result);
|
||||
IncreaseChangeStamp;
|
||||
If Assigned(FOnTargetAdded) then
|
||||
FOnTargetAdded(Self,Result);
|
||||
end;
|
||||
if not FilenameIsAbsolute(AFileName) then
|
||||
RaiseGDBException(AFileName);
|
||||
if not FileExistsCached(AFileName) then exit;
|
||||
Result:=TIDECompileTarget.Create;
|
||||
Result.FileName:=AFileName;
|
||||
FTargets.Add(Result);
|
||||
IncreaseChangeStamp;
|
||||
If Assigned(FOnTargetAdded) then
|
||||
FOnTargetAdded(Self,Result);
|
||||
end;
|
||||
|
||||
procedure TIDEProjectGroup.RemoveTarget(Index: Integer);
|
||||
var
|
||||
Target: TCompileTarget;
|
||||
Target: TPGCompileTarget;
|
||||
begin
|
||||
Target:=Targets[Index];
|
||||
FTargets.Delete(Index);
|
||||
@ -405,7 +408,7 @@ begin
|
||||
IncreaseChangeStamp;
|
||||
end;
|
||||
|
||||
procedure TIDEProjectGroup.ActivateTarget(T: TCompileTarget);
|
||||
procedure TIDEProjectGroup.ActivateTarget(T: TPGCompileTarget);
|
||||
begin
|
||||
if T.Active then exit;
|
||||
inherited ActivateTarget(T);
|
||||
@ -421,7 +424,7 @@ Var
|
||||
TargetPath: String;
|
||||
XMLConfig: TXMLConfig;
|
||||
I,ACount: Integer;
|
||||
Target: TCompileTarget;
|
||||
Target: TPGCompileTarget;
|
||||
begin
|
||||
TargetPath:=ExpandFileNameUTF8(ExtractFilePath(FileName));
|
||||
Result:=True;
|
||||
@ -494,7 +497,7 @@ Var
|
||||
ARoot: String;
|
||||
XMLConfig: TXMLConfig;
|
||||
I,ACount: Integer;
|
||||
CompTarget: TCompileTarget;
|
||||
CompTarget: TPGCompileTarget;
|
||||
begin
|
||||
TargetPath:=ExtractFilePath(FileName);
|
||||
Result:=True;
|
||||
@ -547,9 +550,38 @@ end;
|
||||
|
||||
procedure TIDECompileTarget.UnLoadTarget;
|
||||
begin
|
||||
if (FTarget<>Nil) and (FTarget is TProjectGroup) then
|
||||
if FTarget<>nil then
|
||||
FreeAndNil(FTarget);
|
||||
FTarget:=Nil;
|
||||
if FFiles<>nil then
|
||||
FreeAndNil(FFiles);
|
||||
if FRequiredPackages<>nil then
|
||||
FreeAndNil(FRequiredPackages);
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetFileCount: integer;
|
||||
begin
|
||||
if FFiles=nil then
|
||||
Result:=0
|
||||
else
|
||||
Result:=FFiles.Count;
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetFiles(Index: integer): string;
|
||||
begin
|
||||
Result:=FFiles[Index];
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetRequiredPackageCount: integer;
|
||||
begin
|
||||
if FRequiredPackages<>nil then
|
||||
Result:=FRequiredPackages.Count
|
||||
else
|
||||
Result:=0;
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetRequiredPackages(Index: integer): TPGDependency;
|
||||
begin
|
||||
Result:=TPGDependency(FRequiredPackages[Index]);
|
||||
end;
|
||||
|
||||
procedure TIDECompileTarget.LoadPackage;
|
||||
@ -557,37 +589,48 @@ var
|
||||
MR: TModalResult;
|
||||
I: Integer;
|
||||
Pkg: TIDEPackage;
|
||||
PkgName: String;
|
||||
begin
|
||||
FTarget:=Nil;
|
||||
MR:=PackageEditingInterface.DoOpenPackageFile(Filename,
|
||||
[pofRevert, pofConvertMacros, pofDoNotOpenEditor],
|
||||
False);
|
||||
if (MR=mrOK) then
|
||||
begin
|
||||
I:=0;
|
||||
while (FTarget=Nil) and (I<PackageEditingInterface.GetPackageCount) do
|
||||
begin
|
||||
Pkg:=PackageEditingInterface.GetPackages(I);
|
||||
if CompareFilenames(Pkg.Filename,Self.Filename)=0 then
|
||||
FTarget:=Pkg; // ToDo: free notification
|
||||
Inc(I);
|
||||
PkgName:=ExtractFileUnitname(Filename,true);
|
||||
if PkgName='' then begin
|
||||
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] invalid package filename "',Filename,'"']);
|
||||
exit;
|
||||
end;
|
||||
|
||||
Pkg:=PackageEditingInterface.FindPackageWithName(PkgName);
|
||||
if Pkg=nil then begin
|
||||
MR:=PackageEditingInterface.DoOpenPackageFile(Filename,
|
||||
[pofDoNotOpenEditor],False);
|
||||
if MR<>mrOk then begin
|
||||
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] DoOpenPackageFile failed on file "',Filename,'"']);
|
||||
exit;
|
||||
end;
|
||||
Pkg:=PackageEditingInterface.FindPackageWithName(PkgName);
|
||||
if Pkg=nil then begin
|
||||
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] DoOpenPackageFile failed pkgname="',PkgName,'" on file "',Filename,'"']);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
if CompareFilenames(Pkg.Filename,Filename)<>0 then begin
|
||||
debugln(['Warning: (lazarus) [TIDECompileTarget.LoadPackage] there is already a package with that name: wanted="',Filename,'" loaded="',Pkg.Filename,'"']);
|
||||
exit;
|
||||
end;
|
||||
|
||||
// load list of file
|
||||
FFiles:=TStringList.Create;
|
||||
for i:=0 to Pkg.FileCount-1 do
|
||||
FFiles.Add(Pkg.Files[i].Filename);
|
||||
|
||||
// load list of required package
|
||||
FRequiredPackages:=TObjectList.Create;
|
||||
// ToDo
|
||||
end;
|
||||
|
||||
procedure TIDECompileTarget.LoadProject;
|
||||
const
|
||||
Flags = [];
|
||||
{ Flags = [ofOnlyIfExists, ofProjectLoading, ofQuiet, ofVirtualFile,
|
||||
ofUseCache, ofMultiOpen, ofDoNotLoadResource,
|
||||
ofLoadHiddenResource, ofInternalFile];}
|
||||
var
|
||||
MR: TModalResult;
|
||||
begin
|
||||
UnloadTarget;
|
||||
MR:=LazarusIDE.DoOpenProjectFile(FileName,Flags);
|
||||
if (MR=mrOK) then
|
||||
FTarget:=LazarusIDE.ActiveProject; // ToDo: free notification
|
||||
// ToDo
|
||||
end;
|
||||
|
||||
procedure TIDECompileTarget.LoadProjectGroup;
|
||||
@ -603,34 +646,42 @@ function TIDECompileTarget.ProjectAction(AAction: TPGTargetAction): TPGActionRes
|
||||
var
|
||||
F: TProjectBuildFlags;
|
||||
begin
|
||||
Result:=arOK;
|
||||
if (LazarusIDE.ActiveProject.ProjectInfoFile<>LazProject.ProjectInfoFile) then
|
||||
if LazarusIDE.DoOpenProjectFile(FileName,[ofOnlyIfExists,ofQuiet,ofUseCache])<>mrOK then
|
||||
exit;
|
||||
// If action was open, we're now all set
|
||||
case AAction of
|
||||
taSettings :
|
||||
; // TODO: Need IDE integration
|
||||
taCompileClean,
|
||||
taCompile :
|
||||
begin
|
||||
F:=[];
|
||||
if (AAction=taCompileClean) then
|
||||
Include(F,pbfCleanCompile);
|
||||
LazarusIDE.DoBuildProject(crCompile,F);
|
||||
end;
|
||||
taRun :
|
||||
; // TODO: Need IDE integration
|
||||
Result:=arFailed;
|
||||
|
||||
// ToDo: if project loaded
|
||||
if (LazarusIDE.ActiveProject<>nil)
|
||||
and (CompareFilenames(LazarusIDE.ActiveProject.ProjectInfoFile,Filename)=0)
|
||||
then begin
|
||||
// project loaded => use IDE functions
|
||||
// ToDo
|
||||
case AAction of
|
||||
taSettings :
|
||||
; // TODO: Need IDE integration
|
||||
taCompileClean,
|
||||
taCompile :
|
||||
begin
|
||||
F:=[];
|
||||
if (AAction=taCompileClean) then
|
||||
Include(F,pbfCleanCompile);
|
||||
if LazarusIDE.DoBuildProject(crCompile,F)=mrOk then
|
||||
exit(arOK);
|
||||
end;
|
||||
taRun :
|
||||
; // TODO: Need IDE integration
|
||||
end;
|
||||
end else begin
|
||||
// project not loaded => use lazbuild
|
||||
// ToDo
|
||||
end;
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.PackageAction(AAction: TPGTargetAction): TPGActionResult;
|
||||
Var
|
||||
L: TObjectList;
|
||||
begin
|
||||
Result:=arOK;
|
||||
Result:=arFailed;
|
||||
|
||||
if (AAction in [taOpen,taSettings]) then
|
||||
PackageEditingInterface.DoOpenPackageFile(FileName,[],False);
|
||||
if PackageEditingInterface.DoOpenPackageFile(FileName,[pofDoNotOpenEditor],False)<>mrOk then
|
||||
exit;
|
||||
case AAction of
|
||||
taSettings :
|
||||
; // TODO: Need IDE integration
|
||||
@ -639,15 +690,7 @@ begin
|
||||
taCompileClean :
|
||||
; // TODO: Need IDE integration
|
||||
taInstall :
|
||||
begin
|
||||
L:=TObjectList.Create(False);
|
||||
try
|
||||
L.Add(LazPackage);
|
||||
PackageEditingInterface.InstallPackages(L,[]);
|
||||
finally
|
||||
L.Free;
|
||||
end;
|
||||
end;
|
||||
; // TODO: Need IDE integration
|
||||
taUninstall :
|
||||
; // TODO: Need IDE integration
|
||||
end;
|
||||
@ -662,20 +705,6 @@ begin
|
||||
Result:=GetProjectGroup.PerformFrom(0,AAction);
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetIDEPackage: TIDEPackage;
|
||||
begin
|
||||
If FTarget=Nil then
|
||||
LoadTarget;
|
||||
Result:=TIDEPackage(FTarget);
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetLazProject: TLazProject;
|
||||
begin
|
||||
If FTarget=Nil then
|
||||
LoadTarget;
|
||||
Result:=TLazProject(FTarget);
|
||||
end;
|
||||
|
||||
function TIDECompileTarget.GetProjectGroup: TProjectGroup;
|
||||
begin
|
||||
If FTarget=Nil then
|
||||
|
||||
@ -35,7 +35,7 @@ type
|
||||
|
||||
TNodeData = class(TObject)
|
||||
NodeType: TNodeType;
|
||||
Target: TCompileTarget;
|
||||
Target: TPGCompileTarget;
|
||||
ProjectGroup: TProjectGroup; // projectgroup to which target belongs
|
||||
end;
|
||||
TTargetNodes = Array[Boolean] of TTreeNode;
|
||||
@ -118,17 +118,17 @@ type
|
||||
procedure TVPGDblClick(Sender: TObject);
|
||||
private
|
||||
FProjectGroup: TProjectGroup;
|
||||
FProjectGroupTarget: TCompileTarget;
|
||||
FProjectGroupTarget: TPGCompileTarget;
|
||||
FNPG: TTreeNode;
|
||||
FActiveTarget: TCompileTarget;
|
||||
FActiveTarget: TPGCompileTarget;
|
||||
FTargetNodes: TTargetNodes;
|
||||
// Project group callbacks
|
||||
procedure ConfigNode(Node: TTreeNode; Const ACaption: String;
|
||||
ANodeData: TNodeData);
|
||||
procedure DoTargetAdded(Sender: TObject; Target: TCompileTarget);
|
||||
procedure DoTargetDeleted(Sender: TObject; Target: TCompileTarget);
|
||||
procedure DoTargetActivated(Sender: TObject; Target: TCompileTarget);
|
||||
procedure DoTargetExchanged(Sender: TObject; Target1, Target2: TCompileTarget);
|
||||
procedure DoTargetAdded(Sender: TObject; Target: TPGCompileTarget);
|
||||
procedure DoTargetDeleted(Sender: TObject; Target: TPGCompileTarget);
|
||||
procedure DoTargetActivated(Sender: TObject; Target: TPGCompileTarget);
|
||||
procedure DoTargetExchanged(Sender: TObject; Target1, Target2: TPGCompileTarget);
|
||||
function AllowPerform(ATargetAction: TPGTargetAction; AAction: TAction= Nil): Boolean;
|
||||
procedure ClearEventCallBacks(AProjectGroup: TProjectGroup);
|
||||
procedure SetEventCallBacks(AProjectGroup: TProjectGroup);
|
||||
@ -137,21 +137,21 @@ type
|
||||
procedure ShowDependencies(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TObject; Out PD: TTargetNodes);
|
||||
procedure ShowFileName;
|
||||
procedure Perform(ATargetAction: TPGTargetAction);
|
||||
function GetActiveTarget: TCompileTarget;
|
||||
function GetActiveTarget: TPGCompileTarget;
|
||||
// Treeview Node management
|
||||
function FindNodeFromTarget(ATarget: TCompileTarget): TTreeNode;
|
||||
function FindNodeFromTarget(ATarget: TPGCompileTarget): TTreeNode;
|
||||
procedure FreeNodeData;
|
||||
class function TargetFromNode(N: TTreeNode): TCompileTarget;
|
||||
class function TargetFromNode(N: TTreeNode): TPGCompileTarget;
|
||||
function DisplayFileName(AProjectGroup: TProjectGroup;NodeType: TNodeType; AFileName: String): String;
|
||||
function CreateNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget; AProjectGroup: TProjectGroup): TTreeNode;
|
||||
procedure FillPackageNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TIDEPackage);
|
||||
procedure FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TLazProject);
|
||||
procedure FillTargetNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TCompileTarget);
|
||||
function CreateNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType; ANodeData: TPGCompileTarget; AProjectGroup: TProjectGroup): TTreeNode;
|
||||
procedure FillPackageNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
|
||||
procedure FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
|
||||
procedure FillTargetNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
|
||||
procedure FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; Out TargetNodes: TTargetNodes);
|
||||
function GetNodeIndex(ANodeType: TNodeType; ANodeData: TCompileTarget ): Integer;
|
||||
function GetNodeIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget ): Integer;
|
||||
function SelectedNodeData: TNodeData;
|
||||
function SelectedTarget: TCompileTarget;
|
||||
function SelectedNodeType: TCompileTarget;
|
||||
function SelectedTarget: TPGCompileTarget;
|
||||
function SelectedNodeType: TPGCompileTarget;
|
||||
procedure UpdateIDEMenuCommandFromAction(Sender: TObject; Item: TIDEMenuCommand);
|
||||
protected
|
||||
procedure Localize;
|
||||
@ -159,7 +159,7 @@ type
|
||||
procedure UpdateShowing; override;
|
||||
public
|
||||
property ProjectGroup: TProjectGroup Read FProjectGroup Write SetProjectGroup;
|
||||
property ActiveTarget: TCompileTarget Read GetActiveTarget;
|
||||
property ActiveTarget: TPGCompileTarget Read GetActiveTarget;
|
||||
end;
|
||||
|
||||
var
|
||||
@ -476,7 +476,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.DoTargetAdded(Sender: TObject;
|
||||
Target: TCompileTarget);
|
||||
Target: TPGCompileTarget);
|
||||
Var
|
||||
PG: TProjectGroup;
|
||||
N: TTreeNode;
|
||||
@ -490,7 +490,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.DoTargetDeleted(Sender: TObject;
|
||||
Target: TCompileTarget);
|
||||
Target: TPGCompileTarget);
|
||||
Var
|
||||
PG: TProjectGroup;
|
||||
N: TTreeNode;
|
||||
@ -505,7 +505,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.DoTargetActivated(Sender: TObject;
|
||||
Target: TCompileTarget);
|
||||
Target: TPGCompileTarget);
|
||||
Var
|
||||
NC,NA: TTreeNode;
|
||||
N: String;
|
||||
@ -525,7 +525,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.DoTargetExchanged(Sender: TObject; Target1,
|
||||
Target2: TCompileTarget);
|
||||
Target2: TPGCompileTarget);
|
||||
Var
|
||||
S,N1,N2: TTreeNode;
|
||||
ND1,ND2: TNodeData;
|
||||
@ -578,7 +578,7 @@ end;
|
||||
|
||||
procedure TProjectGroupEditorForm.ATargetActivateUpdate(Sender: TObject);
|
||||
Var
|
||||
T: TCompileTarget;
|
||||
T: TPGCompileTarget;
|
||||
begin
|
||||
T:=SelectedTarget;
|
||||
(Sender as TAction).Enabled:=Assigned(T) and Not T.Active;
|
||||
@ -608,7 +608,7 @@ end;
|
||||
|
||||
function TProjectGroupEditorForm.AllowPerform(ATargetAction: TPGTargetAction; AAction: TAction = Nil): Boolean;
|
||||
Var
|
||||
T: TCompileTarget;
|
||||
T: TPGCompileTarget;
|
||||
begin
|
||||
T:=SelectedTarget;
|
||||
Result:=Assigned(T) and (ATargetAction in T.AllowedActions);
|
||||
@ -638,7 +638,7 @@ end;
|
||||
|
||||
procedure TProjectGroupEditorForm.AProjectGroupDeleteExecute(Sender: TObject);
|
||||
Var
|
||||
T: TCompileTarget;
|
||||
T: TPGCompileTarget;
|
||||
begin
|
||||
T:=SelectedTarget;
|
||||
FProjectGroup.RemoveTarget(T);
|
||||
@ -646,7 +646,7 @@ end;
|
||||
|
||||
procedure TProjectGroupEditorForm.AProjectGroupDeleteUpdate(Sender: TObject);
|
||||
Var
|
||||
T: TCompileTarget;
|
||||
T: TPGCompileTarget;
|
||||
begin
|
||||
T:=SelectedTarget;
|
||||
(Sender as TAction).Enabled:=(T<>Nil) and (T<>FProjectGroupTarget) and Not T.Removed;
|
||||
@ -718,7 +718,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TProjectGroupEditorForm.GetNodeIndex(ANodeType: TNodeType; ANodeData: TCompileTarget): Integer;
|
||||
function TProjectGroupEditorForm.GetNodeIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget): Integer;
|
||||
begin
|
||||
Case ANodeType of
|
||||
ntProjectGroup: Result:=NIProjectGroup;
|
||||
@ -760,7 +760,7 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
function TProjectGroupEditorForm.SelectedTarget: TCompileTarget;
|
||||
function TProjectGroupEditorForm.SelectedTarget: TPGCompileTarget;
|
||||
Var
|
||||
N: TNodeData;
|
||||
begin
|
||||
@ -771,7 +771,7 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
function TProjectGroupEditorForm.SelectedNodeType: TCompileTarget;
|
||||
function TProjectGroupEditorForm.SelectedNodeType: TPGCompileTarget;
|
||||
Var
|
||||
N: TNodeData;
|
||||
begin
|
||||
@ -797,7 +797,7 @@ begin
|
||||
end;
|
||||
|
||||
function TProjectGroupEditorForm.CreateNode(AParent: TTreeNode;
|
||||
const ACaption: String; ANodeType: TNodeType; ANodeData: TCompileTarget;
|
||||
const ACaption: String; ANodeType: TNodeType; ANodeData: TPGCompileTarget;
|
||||
AProjectGroup: TProjectGroup): TTreeNode;
|
||||
Var
|
||||
ND: TNodeData;
|
||||
@ -839,7 +839,7 @@ begin
|
||||
FNPG.Text:=DisplayFileName(FProjectGroup,ntProjectGroup,FProjectGroup.FileName);
|
||||
end;
|
||||
|
||||
function TProjectGroupEditorForm.FindNodeFromTarget(ATarget: TCompileTarget): TTreeNode;
|
||||
function TProjectGroupEditorForm.FindNodeFromTarget(ATarget: TPGCompileTarget): TTreeNode;
|
||||
Var
|
||||
I: Integer;
|
||||
begin
|
||||
@ -888,7 +888,7 @@ procedure TProjectGroupEditorForm.FillProjectGroupNode(AParent: TTreeNode;
|
||||
Const
|
||||
TNT: Array[Boolean] of TNodeType = (ntTarget,ntRemovedTarget);
|
||||
Var
|
||||
T: TCompileTarget;
|
||||
T: TPGCompileTarget;
|
||||
TTN,TN: TTreeNode;
|
||||
I: Integer;
|
||||
begin
|
||||
@ -935,7 +935,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TLazProject);
|
||||
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TPGCompileTarget);
|
||||
Var
|
||||
PF,PD: TTargetNodes;
|
||||
I: Integer;
|
||||
@ -944,12 +944,14 @@ begin
|
||||
PF[True]:=CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
|
||||
// TODO Ideally, we can show removed files
|
||||
For I:=0 to T.FileCount-1 do
|
||||
CreateNode(PF[False],DisplayFileName(AProjectGroup,ntFile,T.Files[i].Filename),ntFile,Nil,AProjectGroup);
|
||||
CreateNode(PF[False],DisplayFileName(AProjectGroup,
|
||||
ntFile,T.Files[i]),ntFile,Nil,AProjectGroup);
|
||||
ShowDependencies(AParent,AProjectGroup,T,PD);
|
||||
// TODO: Build mode info Not available ?
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TIDEPackage);
|
||||
procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode;
|
||||
AProjectGroup: TProjectGroup; T: TPGCompileTarget);
|
||||
Var
|
||||
PF,PD: TTargetNodes;
|
||||
I: Integer;
|
||||
@ -958,11 +960,13 @@ begin
|
||||
PF[True]:=CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
|
||||
// ToDo Ideally, we can show removed files
|
||||
For I:=0 to T.FileCount-1 do
|
||||
CreateNode(PF[False],DisplayFileName(AProjectGroup,ntFile,T.Files[i].Filename),ntFile,Nil,AProjectGroup);
|
||||
CreateNode(PF[False],DisplayFileName(AProjectGroup,
|
||||
ntFile,T.Files[i]),ntFile,Nil,AProjectGroup);
|
||||
ShowDependencies(AParent,AProjectGroup,T,PD);
|
||||
end;
|
||||
|
||||
procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; T: TCompileTarget);
|
||||
procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode;
|
||||
AProjectGroup: TProjectGroup; T: TPGCompileTarget);
|
||||
Var
|
||||
PN: TTargetNodes;
|
||||
begin
|
||||
@ -971,19 +975,19 @@ begin
|
||||
if T=Nil then
|
||||
exit;
|
||||
Case T.TargetType of
|
||||
ttProject: FillProjectNode(AParent,AProjectGroup,T.LazProject);
|
||||
ttPackage: FillPackageNode(AParent,AProjectGroup,T.LazPackage);
|
||||
ttProject: FillProjectNode(AParent,AProjectGroup,T);
|
||||
ttPackage: FillPackageNode(AParent,AProjectGroup,T);
|
||||
ttProjectGroup: FillProjectgroupNode(AParent,T.ProjectGroup,PN);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TProjectGroupEditorForm.GetActiveTarget: TCompileTarget;
|
||||
function TProjectGroupEditorForm.GetActiveTarget: TPGCompileTarget;
|
||||
begin
|
||||
Result:=FActiveTarget;
|
||||
end;
|
||||
|
||||
class function TProjectGroupEditorForm.TargetFromNode(N: TTreeNode
|
||||
): TCompileTarget;
|
||||
): TPGCompileTarget;
|
||||
begin
|
||||
if (N<>Nil) and (N.Data<>Nil) then
|
||||
Result:=TNodeData(N.Data).Target
|
||||
|
||||
@ -16,7 +16,7 @@ Type
|
||||
ttProject,
|
||||
ttPackage,
|
||||
ttProjectGroup, // nested group
|
||||
ttFile, // build/run file, parameters stored IDE directives
|
||||
ttPascalFile, // build/run file, parameters stored IDE directives
|
||||
ttExternalTool
|
||||
);
|
||||
TPGTargetTypes = set of TPGTargetType;
|
||||
@ -36,27 +36,33 @@ Type
|
||||
|
||||
TProjectGroup = class;
|
||||
|
||||
{ TCompileTarget - a node in the tree, e.g. a project, package or group }
|
||||
TPGDependency = class
|
||||
public
|
||||
PackageName: string;
|
||||
end;
|
||||
|
||||
TCompileTarget = class
|
||||
{ TPGCompileTarget - a node in the tree, see TPGTargetType }
|
||||
|
||||
TPGCompileTarget = class
|
||||
private
|
||||
FActive: Boolean;
|
||||
FFilename: string;
|
||||
FTargetType: TPGTargetType;
|
||||
FRemoved: boolean;
|
||||
protected
|
||||
function PerformAction (AAction: TPGTargetAction): TPGActionResult; virtual; abstract;
|
||||
function Perform (AAction: TPGTargetAction): TPGActionResult;
|
||||
// By default, return all allowed actions for target type.
|
||||
function GetAllowedActions: TPGTargetActions; virtual;
|
||||
function GetLazProject: TLazProject; virtual; abstract;
|
||||
function GetAllowedActions: TPGTargetActions; virtual; // By default, return all allowed actions for target type.
|
||||
function GetFileCount: integer; virtual; abstract;
|
||||
function GetFiles(Index: integer): string; virtual; abstract;
|
||||
function GetProjectGroup: TProjectGroup; virtual; abstract;
|
||||
procedure SetTargetType(AValue: TPGTargetType); virtual;
|
||||
procedure SetFilename(const AValue: string); virtual;
|
||||
function GetIDEPackage: TIDEPackage; virtual; abstract;
|
||||
procedure SetRemoved(const AValue: boolean); virtual;
|
||||
function GetRequiredPackageCount: integer; virtual; abstract;
|
||||
function GetRequiredPackages(Index: integer): TPGDependency; virtual; abstract;
|
||||
function Perform (AAction: TPGTargetAction): TPGActionResult;
|
||||
function PerformAction (AAction: TPGTargetAction): TPGActionResult; virtual; abstract;
|
||||
procedure Activate; virtual;
|
||||
procedure DeActivate; virtual;
|
||||
procedure SetFilename(const AValue: string); virtual;
|
||||
procedure SetRemoved(const AValue: boolean); virtual;
|
||||
procedure SetTargetType(AValue: TPGTargetType); virtual;
|
||||
public
|
||||
property Filename: string read FFilename write SetFilename; // Absolute, not relative. (ToDo: store them relative)
|
||||
property Removed: boolean read FRemoved write SetRemoved;
|
||||
@ -65,9 +71,11 @@ Type
|
||||
// Currently allowed actions.
|
||||
property AllowedActions: TPGTargetActions Read GetAllowedActions;
|
||||
//
|
||||
property LazPackage: TIDEPackage read GetIDEPackage;
|
||||
property LazProject: TLazProject Read GetLazProject;
|
||||
property ProjectGroup: TProjectGroup Read GetProjectGroup;
|
||||
property Files[Index: integer]: string read GetFiles;
|
||||
property FileCount: integer read GetFileCount;
|
||||
property RequiredPackages[Index: integer]: TPGDependency read GetRequiredPackages;
|
||||
property RequiredPackageCount: integer read GetRequiredPackageCount;
|
||||
end;
|
||||
|
||||
{ TProjectGroup }
|
||||
@ -77,41 +85,41 @@ Type
|
||||
FChangeStamp: int64;
|
||||
FFileName: String;
|
||||
FLastSavedChangeStamp: int64;
|
||||
function GetActiveTarget: TCompileTarget;
|
||||
procedure SetActiveTarget(AValue: TCompileTarget);
|
||||
function GetActiveTarget: TPGCompileTarget;
|
||||
procedure SetActiveTarget(AValue: TPGCompileTarget);
|
||||
procedure SetModified(AValue: Boolean);
|
||||
protected
|
||||
procedure SetFileName(AValue: String); virtual;
|
||||
function GetModified: Boolean; virtual;
|
||||
function GetTargetCount: Integer; virtual; abstract;
|
||||
function GetTarget(Index: Integer): TCompileTarget; virtual; abstract;
|
||||
function GetTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
|
||||
function GetRemovedTargetCount: Integer; virtual; abstract;
|
||||
function GetRemovedTarget(Index: Integer): TCompileTarget; virtual; abstract;
|
||||
function GetRemovedTarget(Index: Integer): TPGCompileTarget; virtual; abstract;
|
||||
public
|
||||
function Perform(Index: Integer; AAction: TPGTargetAction): TPGActionResult;
|
||||
function Perform(Const AFileName: String; AAction: TPGTargetAction): TPGActionResult;
|
||||
function Perform(Target: TCompileTarget; AAction: TPGTargetAction): TPGActionResult; virtual;
|
||||
function Perform(Target: TPGCompileTarget; AAction: TPGTargetAction): TPGActionResult; virtual;
|
||||
function ActionAllowsFrom(Index: Integer; AAction: TPGTargetAction): Boolean; virtual;
|
||||
function PerformFrom(AIndex: Integer; AAction: TPGTargetAction): TPGActionResult; virtual;
|
||||
function IndexOfTarget(Const Target: TCompileTarget): Integer; virtual; abstract;
|
||||
function IndexOfTarget(Const Target: TPGCompileTarget): Integer; virtual; abstract;
|
||||
function IndexOfTarget(Const AFilename: String): Integer; virtual;
|
||||
function IndexOfRemovedTarget(Const Target: TCompileTarget): Integer; virtual; abstract;
|
||||
function IndexOfRemovedTarget(Const Target: TPGCompileTarget): Integer; virtual; abstract;
|
||||
function IndexOfRemovedTarget(Const AFilename: String): Integer; virtual;
|
||||
function AddTarget(Const AFileName: String): TCompileTarget; virtual; abstract;
|
||||
function AddTarget(Const AFileName: String): TPGCompileTarget; virtual; abstract;
|
||||
procedure ExchangeTargets(ASource, ATarget: Integer); virtual; abstract;
|
||||
procedure RemoveTarget(Index: Integer); virtual; abstract;
|
||||
procedure RemoveTarget(Const AFileName: String);
|
||||
procedure RemoveTarget(Target: TCompileTarget);
|
||||
procedure RemoveTarget(Target: TPGCompileTarget);
|
||||
procedure ActivateTarget(Index: Integer);
|
||||
procedure ActivateTarget(Const AFileName: String);
|
||||
procedure ActivateTarget(Target: TCompileTarget); virtual;
|
||||
procedure ActivateTarget(Target: TPGCompileTarget); virtual;
|
||||
procedure IncreaseChangeStamp;
|
||||
property FileName: String Read FFileName Write SetFileName; // absolute
|
||||
property Targets[Index: Integer]: TCompileTarget Read GetTarget;
|
||||
property Targets[Index: Integer]: TPGCompileTarget Read GetTarget;
|
||||
property TargetCount: Integer Read GetTargetCount;
|
||||
property RemovedTargets[Index: Integer]: TCompileTarget Read GetRemovedTarget;
|
||||
property RemovedTargets[Index: Integer]: TPGCompileTarget Read GetRemovedTarget;
|
||||
property RemovedTargetCount: Integer Read GetRemovedTargetCount;
|
||||
property ActiveTarget: TCompileTarget Read GetActiveTarget Write SetActiveTarget;
|
||||
property ActiveTarget: TPGCompileTarget Read GetActiveTarget Write SetActiveTarget;
|
||||
property Modified: Boolean Read GetModified write SetModified;
|
||||
property ChangeStamp: int64 read FChangeStamp;
|
||||
end;
|
||||
@ -144,7 +152,7 @@ const
|
||||
[taOpen,taSettings,taCompile,taCompileClean,taRun], // ttProject
|
||||
[taOpen,taSettings,taCompile,taCompileClean,taInstall,taUninstall], // ttPackage
|
||||
[taOpen,taCompile,taCompileClean], // ttProjectGroup
|
||||
[taOpen,taCompile,taRun], // ttFile
|
||||
[taOpen,taCompile,taRun], // ttPascalFile
|
||||
[taOpen,taRun] // ttExternalTool
|
||||
);
|
||||
|
||||
@ -165,7 +173,7 @@ begin
|
||||
'lpg': Result:=ttProjectGroup;
|
||||
'pas',
|
||||
'pp',
|
||||
'p' : Result:=ttFile;
|
||||
'p' : Result:=ttPascalFile;
|
||||
else
|
||||
Result:=ttUnknown;
|
||||
end;
|
||||
@ -185,7 +193,7 @@ end;
|
||||
|
||||
{ TProjectGroup }
|
||||
|
||||
function TProjectGroup.GetActiveTarget: TCompileTarget;
|
||||
function TProjectGroup.GetActiveTarget: TPGCompileTarget;
|
||||
Var
|
||||
I: Integer;
|
||||
begin
|
||||
@ -198,7 +206,7 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
procedure TProjectGroup.SetActiveTarget(AValue: TCompileTarget);
|
||||
procedure TProjectGroup.SetActiveTarget(AValue: TPGCompileTarget);
|
||||
begin
|
||||
ActivateTarget(AValue);
|
||||
end;
|
||||
@ -234,7 +242,7 @@ begin
|
||||
Result:=Perform(IndexOfTarget(AFileName),AAction);
|
||||
end;
|
||||
|
||||
function TProjectGroup.Perform(Target: TCompileTarget; AAction: TPGTargetAction): TPGActionResult;
|
||||
function TProjectGroup.Perform(Target: TPGCompileTarget; AAction: TPGTargetAction): TPGActionResult;
|
||||
begin
|
||||
Result:=Target.Perform(AAction);
|
||||
end;
|
||||
@ -243,7 +251,7 @@ function TProjectGroup.ActionAllowsFrom(Index: Integer; AAction: TPGTargetAction
|
||||
): Boolean;
|
||||
Var
|
||||
C: Integer;
|
||||
T: TCompileTarget;
|
||||
T: TPGCompileTarget;
|
||||
begin
|
||||
Result:=ActionAllowsMulti(AAction);
|
||||
C:=TargetCount;
|
||||
@ -290,7 +298,7 @@ begin
|
||||
RemoveTarget(IndexOfTarget(AFileName))
|
||||
end;
|
||||
|
||||
procedure TProjectGroup.RemoveTarget(Target: TCompileTarget);
|
||||
procedure TProjectGroup.RemoveTarget(Target: TPGCompileTarget);
|
||||
begin
|
||||
RemoveTarget(IndexOfTarget(Target))
|
||||
end;
|
||||
@ -305,10 +313,10 @@ begin
|
||||
ActivateTarget(IndexOfTarget(AFileName));
|
||||
end;
|
||||
|
||||
procedure TProjectGroup.ActivateTarget(Target: TCompileTarget);
|
||||
procedure TProjectGroup.ActivateTarget(Target: TPGCompileTarget);
|
||||
var
|
||||
I: Integer;
|
||||
TD: TCompileTarget;
|
||||
TD: TPGCompileTarget;
|
||||
begin
|
||||
if Target.Active then exit;
|
||||
for I:=0 to TargetCount-1 do
|
||||
@ -325,27 +333,27 @@ begin
|
||||
LUIncreaseChangeStamp64(FChangeStamp);
|
||||
end;
|
||||
|
||||
{ TCompileTarget }
|
||||
{ TPGCompileTarget }
|
||||
|
||||
function TCompileTarget.GetAllowedActions: TPGTargetActions;
|
||||
function TPGCompileTarget.GetAllowedActions: TPGTargetActions;
|
||||
begin
|
||||
Result:=PGTargetActions[TargetType];
|
||||
end;
|
||||
|
||||
procedure TCompileTarget.SetTargetType(AValue: TPGTargetType);
|
||||
procedure TPGCompileTarget.SetTargetType(AValue: TPGTargetType);
|
||||
begin
|
||||
if FTargetType=AValue then Exit;
|
||||
FTargetType:=AValue;
|
||||
end;
|
||||
|
||||
procedure TCompileTarget.SetFilename(const AValue: string);
|
||||
procedure TPGCompileTarget.SetFilename(const AValue: string);
|
||||
begin
|
||||
if FFileName=AValue then Exit;
|
||||
FFileName:=AValue;
|
||||
TargetType:=TargetTypeFromExtenstion(ExtractFileExt(AValue));
|
||||
end;
|
||||
|
||||
procedure TCompileTarget.SetRemoved(const AValue: boolean);
|
||||
procedure TPGCompileTarget.SetRemoved(const AValue: boolean);
|
||||
begin
|
||||
if Removed=AValue then exit;
|
||||
FRemoved:=AValue;
|
||||
@ -353,17 +361,17 @@ begin
|
||||
Deactivate;
|
||||
end;
|
||||
|
||||
procedure TCompileTarget.Activate;
|
||||
procedure TPGCompileTarget.Activate;
|
||||
begin
|
||||
FActive:=True;
|
||||
end;
|
||||
|
||||
procedure TCompileTarget.DeActivate;
|
||||
procedure TPGCompileTarget.DeActivate;
|
||||
begin
|
||||
FActive:=False;
|
||||
end;
|
||||
|
||||
function TCompileTarget.Perform(AAction: TPGTargetAction): TPGActionResult;
|
||||
function TPGCompileTarget.Perform(AAction: TPGTargetAction): TPGActionResult;
|
||||
begin
|
||||
if Not (AAction in AllowedActions) then
|
||||
Result:=arNotAllowed
|
||||
|
||||
Loading…
Reference in New Issue
Block a user