mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 18:59:21 +02:00
project groups: re-add removed targets
git-svn-id: trunk@50468 -
This commit is contained in:
parent
702566d255
commit
d34b9bf553
@ -97,6 +97,7 @@ type
|
|||||||
FOnTargetActiveChanged: TTargetEvent;
|
FOnTargetActiveChanged: TTargetEvent;
|
||||||
FOnTargetAdded: TTargetEvent;
|
FOnTargetAdded: TTargetEvent;
|
||||||
FOnTargetDeleted: TTargetEvent;
|
FOnTargetDeleted: TTargetEvent;
|
||||||
|
FOnTargetReadded: TTargetEvent;
|
||||||
FOnTargetsExchanged: TTargetExchangeEvent;
|
FOnTargetsExchanged: TTargetExchangeEvent;
|
||||||
FTargets: TFPObjectList;
|
FTargets: TFPObjectList;
|
||||||
FRemovedTargets: TFPObjectList;
|
FRemovedTargets: TFPObjectList;
|
||||||
@ -115,6 +116,7 @@ type
|
|||||||
function IndexOfTarget(const Target: TPGCompileTarget): Integer; override;
|
function IndexOfTarget(const Target: TPGCompileTarget): Integer; override;
|
||||||
function IndexOfRemovedTarget(const Target: TPGCompileTarget): Integer; override;
|
function IndexOfRemovedTarget(const Target: TPGCompileTarget): Integer; override;
|
||||||
function AddTarget(Const AFileName: String): TPGCompileTarget; override;
|
function AddTarget(Const AFileName: String): TPGCompileTarget; override;
|
||||||
|
procedure ReAddTarget(Target: TPGCompileTarget); override;
|
||||||
procedure RemoveTarget(Index: Integer); override;
|
procedure RemoveTarget(Index: Integer); override;
|
||||||
procedure ExchangeTargets(ASource, ATarget: Integer); override;
|
procedure ExchangeTargets(ASource, ATarget: Integer); override;
|
||||||
procedure ActiveTargetChanged(T: TPGCompileTarget);
|
procedure ActiveTargetChanged(T: TPGCompileTarget);
|
||||||
@ -123,6 +125,7 @@ type
|
|||||||
property OnFileNameChange: TNotifyEvent Read FOnFileNameChange Write FOnFileNameChange;
|
property OnFileNameChange: TNotifyEvent Read FOnFileNameChange Write FOnFileNameChange;
|
||||||
property OnTargetAdded: TTargetEvent Read FOnTargetAdded Write FOnTargetAdded;
|
property OnTargetAdded: TTargetEvent Read FOnTargetAdded Write FOnTargetAdded;
|
||||||
property OnTargetDeleted: TTargetEvent Read FOnTargetDeleted Write FOnTargetDeleted;
|
property OnTargetDeleted: TTargetEvent Read FOnTargetDeleted Write FOnTargetDeleted;
|
||||||
|
property OnTargetReadded: TTargetEvent Read FOnTargetReadded Write FOnTargetReadded;
|
||||||
property OnTargetActiveChanged: TTargetEvent Read FOnTargetActiveChanged Write FOnTargetActiveChanged;
|
property OnTargetActiveChanged: TTargetEvent Read FOnTargetActiveChanged Write FOnTargetActiveChanged;
|
||||||
property OnTargetsExchanged: TTargetExchangeEvent Read FOnTargetsExchanged Write FOnTargetsExchanged;
|
property OnTargetsExchanged: TTargetExchangeEvent Read FOnTargetsExchanged Write FOnTargetsExchanged;
|
||||||
end;
|
end;
|
||||||
@ -707,6 +710,23 @@ begin
|
|||||||
Root.OnTargetAdded(Self,Result);
|
Root.OnTargetAdded(Self,Result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIDEProjectGroup.ReAddTarget(Target: TPGCompileTarget);
|
||||||
|
var
|
||||||
|
Root: TIDEProjectGroup;
|
||||||
|
begin
|
||||||
|
if (Target=nil) or (not Target.Removed) then
|
||||||
|
raise Exception.Create('');
|
||||||
|
FRemovedTargets.OwnsObjects:=false;
|
||||||
|
FRemovedTargets.Remove(Target);
|
||||||
|
FRemovedTargets.OwnsObjects:=true;
|
||||||
|
FTargets.Add(Target);
|
||||||
|
Target.Removed:=false;
|
||||||
|
Modified:=true;
|
||||||
|
Root:=TIDEProjectGroup(GetRootGroup);
|
||||||
|
if Assigned(Root.OnTargetReadded) then
|
||||||
|
Root.OnTargetReadded(Self,Target);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIDEProjectGroup.RemoveTarget(Index: Integer);
|
procedure TIDEProjectGroup.RemoveTarget(Index: Integer);
|
||||||
var
|
var
|
||||||
Target: TPGCompileTarget;
|
Target: TPGCompileTarget;
|
||||||
@ -718,8 +738,8 @@ begin
|
|||||||
FTargets.Delete(Index);
|
FTargets.Delete(Index);
|
||||||
FTargets.OwnsObjects:=true;
|
FTargets.OwnsObjects:=true;
|
||||||
FRemovedTargets.Add(Target);
|
FRemovedTargets.Add(Target);
|
||||||
Modified:=true;
|
|
||||||
Target.Removed:=true;
|
Target.Removed:=true;
|
||||||
|
Modified:=true;
|
||||||
Root:=TIDEProjectGroup(GetRootGroup);
|
Root:=TIDEProjectGroup(GetRootGroup);
|
||||||
if Assigned(Root.OnTargetDeleted) then
|
if Assigned(Root.OnTargetDeleted) then
|
||||||
Root.OnTargetDeleted(Self,Target);
|
Root.OnTargetDeleted(Self,Target);
|
||||||
|
@ -28,12 +28,8 @@ type
|
|||||||
ntBuildMode,
|
ntBuildMode,
|
||||||
ntFiles,
|
ntFiles,
|
||||||
ntFile,
|
ntFile,
|
||||||
//ntRemovedFiles,
|
|
||||||
//ntRemovedFile,
|
|
||||||
ntDependencies,
|
ntDependencies,
|
||||||
ntDependency
|
ntDependency
|
||||||
//ntRemovedDependencies,
|
|
||||||
//ntRemovedDependency
|
|
||||||
);
|
);
|
||||||
|
|
||||||
TNodeData = class(TObject)
|
TNodeData = class(TObject)
|
||||||
@ -146,6 +142,7 @@ type
|
|||||||
procedure OnProjectGroupDestroy(Sender: TObject);
|
procedure OnProjectGroupDestroy(Sender: TObject);
|
||||||
procedure OnProjectGroupFileNameChanged(Sender: TObject);
|
procedure OnProjectGroupFileNameChanged(Sender: TObject);
|
||||||
procedure OnTargetAdded(Sender: TObject; Target: TPGCompileTarget);
|
procedure OnTargetAdded(Sender: TObject; Target: TPGCompileTarget);
|
||||||
|
procedure OnTargetReadded(Sender: TObject; Target: TPGCompileTarget);
|
||||||
procedure OnTargetDeleted(Sender: TObject; Target: TPGCompileTarget);
|
procedure OnTargetDeleted(Sender: TObject; Target: TPGCompileTarget);
|
||||||
procedure OnTargetActiveChanged(Sender: TObject; Target: TPGCompileTarget);
|
procedure OnTargetActiveChanged(Sender: TObject; Target: TPGCompileTarget);
|
||||||
procedure OnTargetExchanged(Sender: TObject; Target1, Target2: TPGCompileTarget);
|
procedure OnTargetExchanged(Sender: TObject; Target1, Target2: TPGCompileTarget);
|
||||||
@ -170,9 +167,9 @@ type
|
|||||||
function CreateSectionNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType): TTreeNode;
|
function CreateSectionNode(AParent: TTreeNode; Const ACaption: String; ANodeType: TNodeType): TTreeNode;
|
||||||
function CreateTargetNode(AParent: TTreeNode; ANodeType: TNodeType; aTarget: TPGCompileTarget): TTreeNode;
|
function CreateTargetNode(AParent: TTreeNode; ANodeType: TNodeType; aTarget: TPGCompileTarget): TTreeNode;
|
||||||
function CreateSubNode(AParent: TTreeNode; ANodeType: TNodeType; aParentTarget: TPGCompileTarget; aValue: string): TTreeNode;
|
function CreateSubNode(AParent: TTreeNode; ANodeType: TNodeType; aParentTarget: TPGCompileTarget; aValue: string): TTreeNode;
|
||||||
procedure FillPackageNode(AParent: TTreeNode; T: TPGCompileTarget);
|
procedure FillPackageNode(TVNode: TTreeNode; T: TPGCompileTarget);
|
||||||
procedure FillProjectNode(AParent: TTreeNode; T: TPGCompileTarget);
|
procedure FillProjectNode(TVNode: TTreeNode; T: TPGCompileTarget);
|
||||||
procedure FillTargetNode(AParent: TTreeNode; T: TPGCompileTarget);
|
procedure FillTargetNode(TVNode: TTreeNode; T: TPGCompileTarget);
|
||||||
procedure FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; Out TargetNodes: TTargetNodes);
|
procedure FillProjectGroupNode(AParent: TTreeNode; AProjectGroup: TProjectGroup; Out TargetNodes: TTargetNodes);
|
||||||
function GetNodeImageIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget ): Integer;
|
function GetNodeImageIndex(ANodeType: TNodeType; ANodeData: TPGCompileTarget ): Integer;
|
||||||
function SelectedNodeData: TNodeData;
|
function SelectedNodeData: TNodeData;
|
||||||
@ -304,6 +301,7 @@ begin
|
|||||||
PG.OnFileNameChange:=Nil;
|
PG.OnFileNameChange:=Nil;
|
||||||
PG.OnTargetAdded:=Nil;
|
PG.OnTargetAdded:=Nil;
|
||||||
PG.OnTargetDeleted:=Nil;
|
PG.OnTargetDeleted:=Nil;
|
||||||
|
PG.OnTargetReadded:=Nil;
|
||||||
PG.OnTargetActiveChanged:=Nil;
|
PG.OnTargetActiveChanged:=Nil;
|
||||||
PG.OnTargetsExchanged:=Nil;
|
PG.OnTargetsExchanged:=Nil;
|
||||||
end;
|
end;
|
||||||
@ -317,6 +315,7 @@ begin
|
|||||||
PG.OnFileNameChange:=@OnProjectGroupFileNameChanged;
|
PG.OnFileNameChange:=@OnProjectGroupFileNameChanged;
|
||||||
PG.OnTargetAdded:=@OnTargetAdded;
|
PG.OnTargetAdded:=@OnTargetAdded;
|
||||||
PG.OnTargetDeleted:=@OnTargetDeleted;
|
PG.OnTargetDeleted:=@OnTargetDeleted;
|
||||||
|
PG.OnTargetReadded:=@OnTargetReadded;
|
||||||
PG.OnTargetActiveChanged:=@OnTargetActiveChanged;
|
PG.OnTargetActiveChanged:=@OnTargetActiveChanged;
|
||||||
PG.OnTargetsExchanged:=@OnTargetExchanged;
|
PG.OnTargetsExchanged:=@OnTargetExchanged;
|
||||||
end;
|
end;
|
||||||
@ -652,6 +651,25 @@ begin
|
|||||||
UpdateStatusBarTargetCount;
|
UpdateStatusBarTargetCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TProjectGroupEditorForm.OnTargetReadded(Sender: TObject;
|
||||||
|
Target: TPGCompileTarget);
|
||||||
|
var
|
||||||
|
N, NewNode: TTreeNode;
|
||||||
|
begin
|
||||||
|
if Sender<>ProjectGroup then exit; // ToDo: sub groups
|
||||||
|
N:=FindTVNodeOfTarget(Target);
|
||||||
|
TVPG.BeginUpdate;
|
||||||
|
try
|
||||||
|
TVPG.Items.Delete(N);
|
||||||
|
NewNode:=CreateTargetNode(FTargetNodes[False],ntTarget,Target);
|
||||||
|
FillTargetNode(NewNode,Target);
|
||||||
|
TVPG.Selected:=FProjectGroupTVNode;
|
||||||
|
finally
|
||||||
|
TVPG.EndUpdate;
|
||||||
|
end;
|
||||||
|
UpdateStatusBarTargetCount;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.OnTargetDeleted(Sender: TObject;
|
procedure TProjectGroupEditorForm.OnTargetDeleted(Sender: TObject;
|
||||||
Target: TPGCompileTarget);
|
Target: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
@ -659,9 +677,14 @@ Var
|
|||||||
begin
|
begin
|
||||||
if Sender<>ProjectGroup then exit; // ToDo: sub groups
|
if Sender<>ProjectGroup then exit; // ToDo: sub groups
|
||||||
N:=FindTVNodeOfTarget(Target);
|
N:=FindTVNodeOfTarget(Target);
|
||||||
TVPG.Items.Delete(N);
|
TVPG.BeginUpdate;
|
||||||
CreateTargetNode(FTargetNodes[True],ntRemovedTarget,Target);
|
try
|
||||||
TVPG.Selected:=FProjectGroupTVNode;
|
TVPG.Items.Delete(N);
|
||||||
|
CreateTargetNode(FTargetNodes[True],ntRemovedTarget,Target);
|
||||||
|
TVPG.Selected:=FProjectGroupTVNode;
|
||||||
|
finally
|
||||||
|
TVPG.EndUpdate;
|
||||||
|
end;
|
||||||
UpdateStatusBarTargetCount;
|
UpdateStatusBarTargetCount;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -717,27 +740,34 @@ var
|
|||||||
TVNode: TTreeNode;
|
TVNode: TTreeNode;
|
||||||
begin
|
begin
|
||||||
if FProjectGroup=nil then exit;
|
if FProjectGroup=nil then exit;
|
||||||
InitIDEFileDialog(OpenDialogTarget);
|
|
||||||
With OpenDialogTarget do
|
aTarget:=TIDECompileTarget(SelectedTarget);
|
||||||
|
if (aTarget<>nil) and aTarget.Removed then
|
||||||
begin
|
begin
|
||||||
Filter:='Lazarus projects (*.lpi)|*.lpi'
|
aTarget.Parent.ProjectGroup.ReAddTarget(aTarget);
|
||||||
+'|Lazarus packages (*.lpk)|*.lpk'
|
end else begin
|
||||||
+'|Lazarus project groups (*.lpg)|*.lpg'
|
InitIDEFileDialog(OpenDialogTarget);
|
||||||
+'|Pascal file (*.pas;*.pp;*.p)|*.pas;*.pp;*.p';
|
With OpenDialogTarget do
|
||||||
If Execute then
|
|
||||||
begin
|
begin
|
||||||
aTarget:=FProjectGroup.AddTarget(FileName) as TIDECompileTarget;
|
Filter:='Lazarus projects (*.lpi)|*.lpi'
|
||||||
aTarget.LoadTarget(true);
|
+'|Lazarus packages (*.lpk)|*.lpk'
|
||||||
if aTarget.BuildModeCount>0 then begin
|
+'|Lazarus project groups (*.lpg)|*.lpg'
|
||||||
aMode:=aTarget.BuildModes[0];
|
+'|Pascal file (*.pas;*.pp;*.p)|*.pas;*.pp;*.p';
|
||||||
aMode.Compile:=true;
|
If Execute then
|
||||||
// ToDo: implement changed notification
|
begin
|
||||||
TVNode:=FindTVNodeOfBuildMode(aMode);
|
aTarget:=FProjectGroup.AddTarget(FileName) as TIDECompileTarget;
|
||||||
TVNode.StateIndex:=NSIChecked;
|
aTarget.LoadTarget(true);
|
||||||
|
if aTarget.BuildModeCount>0 then begin
|
||||||
|
aMode:=aTarget.BuildModes[0];
|
||||||
|
aMode.Compile:=true;
|
||||||
|
// ToDo: implement changed notification
|
||||||
|
TVNode:=FindTVNodeOfBuildMode(aMode);
|
||||||
|
TVNode.StateIndex:=NSIChecked;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
StoreIDEFileDialog(OpenDialogTarget);
|
||||||
end;
|
end;
|
||||||
StoreIDEFileDialog(OpenDialogTarget);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.ATargetActivateUpdate(Sender: TObject);
|
procedure TProjectGroupEditorForm.ATargetActivateUpdate(Sender: TObject);
|
||||||
@ -1380,12 +1410,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.FillProjectNode(AParent: TTreeNode;
|
procedure TProjectGroupEditorForm.FillProjectNode(TVNode: TTreeNode;
|
||||||
T: TPGCompileTarget);
|
T: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
FileNodes,DepNodes: TTargetNodes;
|
FileNodes,DepNodes: TTargetNodes;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
BuildModeNode, TVNode: TTreeNode;
|
BuildModeNode, SubTVNode: TTreeNode;
|
||||||
aMode: TPGBuildMode;
|
aMode: TPGBuildMode;
|
||||||
begin
|
begin
|
||||||
TVPG.BeginUpdate;
|
TVPG.BeginUpdate;
|
||||||
@ -1393,30 +1423,30 @@ begin
|
|||||||
// buildmodes
|
// buildmodes
|
||||||
if T.BuildModeCount>1 then
|
if T.BuildModeCount>1 then
|
||||||
begin
|
begin
|
||||||
BuildModeNode:=CreateSectionNode(AParent,lisNodeBuildModes,ntBuildModes);
|
BuildModeNode:=CreateSectionNode(TVNode,lisNodeBuildModes,ntBuildModes);
|
||||||
for i:=0 to T.BuildModeCount-1 do
|
for i:=0 to T.BuildModeCount-1 do
|
||||||
begin
|
begin
|
||||||
aMode:=T.BuildModes[i];
|
aMode:=T.BuildModes[i];
|
||||||
TVNode:=CreateSubNode(BuildModeNode,ntBuildMode,T,aMode.Identifier);
|
SubTVNode:=CreateSubNode(BuildModeNode,ntBuildMode,T,aMode.Identifier);
|
||||||
if aMode.Compile then
|
if aMode.Compile then
|
||||||
TVNode.StateIndex:=NSIChecked
|
SubTVNode.StateIndex:=NSIChecked
|
||||||
else
|
else
|
||||||
TVNode.StateIndex:=NSIUnchecked;
|
SubTVNode.StateIndex:=NSIUnchecked;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
// files
|
// files
|
||||||
FileNodes[False]:=CreateSectionNode(AParent,lisNodeFiles,ntFiles);
|
FileNodes[False]:=CreateSectionNode(TVNode,lisNodeFiles,ntFiles);
|
||||||
FileNodes[True]:=nil; //CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
|
FileNodes[True]:=nil; //CreateNode(TVNode,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
|
||||||
for i:=0 to T.FileCount-1 do
|
for i:=0 to T.FileCount-1 do
|
||||||
CreateSubNode(FileNodes[False],ntFile,T,T.Files[i]);
|
CreateSubNode(FileNodes[False],ntFile,T,T.Files[i]);
|
||||||
// dependencies
|
// dependencies
|
||||||
ShowDependencies(AParent,T,DepNodes);
|
ShowDependencies(TVNode,T,DepNodes);
|
||||||
finally
|
finally
|
||||||
TVPG.EndUpdate;
|
TVPG.EndUpdate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.FillPackageNode(AParent: TTreeNode;
|
procedure TProjectGroupEditorForm.FillPackageNode(TVNode: TTreeNode;
|
||||||
T: TPGCompileTarget);
|
T: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
PF,PD: TTargetNodes;
|
PF,PD: TTargetNodes;
|
||||||
@ -1424,17 +1454,17 @@ Var
|
|||||||
begin
|
begin
|
||||||
TVPG.BeginUpdate;
|
TVPG.BeginUpdate;
|
||||||
try
|
try
|
||||||
PF[False]:=CreateSectionNode(AParent,lisNodeFiles,ntFiles);
|
PF[False]:=CreateSectionNode(TVNode,lisNodeFiles,ntFiles);
|
||||||
PF[True]:=nil; //CreateNode(AParent,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
|
PF[True]:=nil; //CreateNode(TVNode,lisNodeRemovedFiles,ntFiles,Nil,AProjectGroup);
|
||||||
for i:=0 to T.FileCount-1 do
|
for i:=0 to T.FileCount-1 do
|
||||||
CreateSubNode(PF[False],ntFile,T,T.Files[i]);
|
CreateSubNode(PF[False],ntFile,T,T.Files[i]);
|
||||||
ShowDependencies(AParent,T,PD);
|
ShowDependencies(TVNode,T,PD);
|
||||||
finally
|
finally
|
||||||
TVPG.EndUpdate;
|
TVPG.EndUpdate;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectGroupEditorForm.FillTargetNode(AParent: TTreeNode;
|
procedure TProjectGroupEditorForm.FillTargetNode(TVNode: TTreeNode;
|
||||||
T: TPGCompileTarget);
|
T: TPGCompileTarget);
|
||||||
Var
|
Var
|
||||||
PN: TTargetNodes;
|
PN: TTargetNodes;
|
||||||
@ -1442,13 +1472,13 @@ begin
|
|||||||
TVPG.BeginUpdate;
|
TVPG.BeginUpdate;
|
||||||
try
|
try
|
||||||
If T=Nil then
|
If T=Nil then
|
||||||
T:=TargetFromNode(AParent);
|
T:=TargetFromNode(TVNode);
|
||||||
if T=Nil then
|
if T=Nil then
|
||||||
exit;
|
exit;
|
||||||
case T.TargetType of
|
case T.TargetType of
|
||||||
ttProject: FillProjectNode(AParent,T);
|
ttProject: FillProjectNode(TVNode,T);
|
||||||
ttPackage: FillPackageNode(AParent,T);
|
ttPackage: FillPackageNode(TVNode,T);
|
||||||
ttProjectGroup: FillProjectgroupNode(AParent,T.ProjectGroup,PN);
|
ttProjectGroup: FillProjectgroupNode(TVNode,T.ProjectGroup,PN);
|
||||||
ttPascalFile: ;
|
ttPascalFile: ;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
|
@ -168,6 +168,7 @@ Type
|
|||||||
function IndexOfRemovedTarget(Const Target: TPGCompileTarget): Integer; virtual; abstract;
|
function IndexOfRemovedTarget(Const Target: TPGCompileTarget): Integer; virtual; abstract;
|
||||||
function IndexOfRemovedTarget(Const AFilename: String): Integer; virtual;
|
function IndexOfRemovedTarget(Const AFilename: String): Integer; virtual;
|
||||||
function AddTarget(Const AFileName: String): TPGCompileTarget; virtual; abstract;
|
function AddTarget(Const AFileName: String): TPGCompileTarget; virtual; abstract;
|
||||||
|
procedure ReAddTarget(Target: TPGCompileTarget); virtual; abstract;
|
||||||
procedure ExchangeTargets(ASource, ATarget: Integer); virtual; abstract;
|
procedure ExchangeTargets(ASource, ATarget: Integer); virtual; abstract;
|
||||||
procedure RemoveTarget(Index: Integer); virtual; abstract;
|
procedure RemoveTarget(Index: Integer); virtual; abstract;
|
||||||
procedure RemoveTarget(Const AFileName: String);
|
procedure RemoveTarget(Const AFileName: String);
|
||||||
|
Loading…
Reference in New Issue
Block a user