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