mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 13:56:05 +02:00
IDE: project inspector: do not keep references to files and dependencies
git-svn-id: trunk@41913 -
This commit is contained in:
parent
a335aef877
commit
5b38f381dd
@ -49,7 +49,7 @@ uses
|
||||
MemCheck,
|
||||
{$ENDIF}
|
||||
Classes, SysUtils, TypInfo, FPCAdds, LCLProc, LCLIntf, LCLType, Forms,
|
||||
FileUtil, Laz2_XMLCfg, Controls, Dialogs, InterfaceBase, maps,
|
||||
FileUtil, Laz2_XMLCfg, Controls, Dialogs, maps,
|
||||
// codetools
|
||||
CodeToolsConfig, ExprEval, FileProcs, DefineTemplates,
|
||||
BasicCodeTools, CodeToolsCfgScript, CodeToolManager, CodeCache,
|
||||
@ -955,6 +955,7 @@ type
|
||||
|
||||
// package dependencies
|
||||
function FindDependencyByName(const PackageName: string): TPkgDependency;
|
||||
function FindRemovedDependencyByName(const PkgName: string): TPkgDependency;
|
||||
function RequiredDepByIndex(Index: integer): TPkgDependency;
|
||||
function RemovedDepByIndex(Index: integer): TPkgDependency;
|
||||
procedure AddRequiredDependency(Dependency: TPkgDependency);
|
||||
@ -4712,6 +4713,12 @@ begin
|
||||
PackageName);
|
||||
end;
|
||||
|
||||
function TProject.FindRemovedDependencyByName(const PkgName: string
|
||||
): TPkgDependency;
|
||||
begin
|
||||
Result:=FindDependencyByNameInList(FFirstRemovedDependency,pdlRequires,PkgName);
|
||||
end;
|
||||
|
||||
function TProject.RequiredDepByIndex(Index: integer): TPkgDependency;
|
||||
begin
|
||||
Result:=GetDependencyWithIndex(FFirstRequiredDependency,pdlRequires,Index);
|
||||
|
@ -57,11 +57,10 @@ unit ProjectInspector;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LCLProc, LCLType, AvgLvlTree, Forms, Controls, Buttons,
|
||||
ComCtrls, StdCtrls, Menus, Dialogs, Graphics, FileUtil, ExtCtrls,
|
||||
LazIDEIntf, IDEHelpIntf, IDECommands, IDEDialogs,
|
||||
LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, EnvironmentOpts,
|
||||
Project, AddToProjectDlg, PackageSystem, PackageDefs, TreeFilterEdit;
|
||||
Classes, SysUtils, LCLProc, LCLType, Forms, Controls, Buttons,
|
||||
ComCtrls, Menus, Dialogs, FileUtil, ExtCtrls, IDEHelpIntf, IDECommands, IDEDialogs, ProjectIntf,
|
||||
LazarusIDEStrConsts, IDEProcs, IDEOptionDefs,
|
||||
Project, AddToProjectDlg, PackageDefs, TreeFilterEdit;
|
||||
|
||||
type
|
||||
TOnAddUnitToProject =
|
||||
@ -88,7 +87,6 @@ type
|
||||
public
|
||||
Typ: TProjectNodeType;
|
||||
Name: string; // file or package name
|
||||
Data : TObject;
|
||||
Removed : Boolean;
|
||||
Next : TProjectNodeData;
|
||||
end;
|
||||
@ -161,13 +159,15 @@ type
|
||||
FProjectNodeDataList : array [TProjectNodeType] of TProjectNodeData;
|
||||
procedure FreeNodeData(Typ: TProjectNodeType);
|
||||
function CreateNodeData(Typ: TProjectNodeType; aName: string; aRemoved: boolean): TProjectNodeData;
|
||||
function GetNodeData(TVNode: TTreeNode): TProjectNodeData;
|
||||
function GetNodeItem(NodeData: TProjectNodeData): TObject;
|
||||
procedure SetDependencyDefaultFilename(AsPreferred: boolean);
|
||||
procedure SetIdleConnected(const AValue: boolean);
|
||||
procedure SetLazProject(const AValue: TProject);
|
||||
procedure SetShowDirectoryHierarchy(const AValue: boolean);
|
||||
procedure SetSortAlphabetically(const AValue: boolean);
|
||||
procedure SetupComponents;
|
||||
function ChooseImageIndex(Str: String; Data: TObject; var AIsEnabled: Boolean): Integer;
|
||||
function OnTreeViewGetImageIndex(Str: String; Data: TObject; var AIsEnabled: Boolean): Integer;
|
||||
procedure UpdateProjectFiles;
|
||||
procedure UpdateRequiredPackages;
|
||||
procedure OnProjectBeginUpdate(Sender: TObject);
|
||||
@ -608,7 +608,7 @@ begin
|
||||
|
||||
ItemsTreeView.Images := IDEImages.Images_16;
|
||||
ToolBar.Images := IDEImages.Images_16;
|
||||
FilterEdit.OnGetImageIndex:=@ChooseImageIndex;
|
||||
FilterEdit.OnGetImageIndex:=@OnTreeViewGetImageIndex;
|
||||
|
||||
AddBitBtn := CreateToolButton('AddBitBtn', lisAdd, lisPckEditAddAnItem, 'laz_add', @AddBitBtnClick);
|
||||
RemoveBitBtn := CreateToolButton('RemoveBitBtn', lisRemove, lisPckEditRemoveSelectedItem, 'laz_delete', @RemoveBitBtnClick);
|
||||
@ -634,31 +634,30 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.ChooseImageIndex(Str: String; Data: TObject;
|
||||
function TProjectInspectorForm.OnTreeViewGetImageIndex(Str: String; Data: TObject;
|
||||
var AIsEnabled: Boolean): Integer;
|
||||
Var
|
||||
ANodeData : TProjectNodeData;
|
||||
AObject : TObject;
|
||||
var
|
||||
NodeData: TProjectNodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
Result := -1;
|
||||
AObject := NIL;
|
||||
ANodeData := TProjectNodeData(Data);
|
||||
If Assigned(ANodeData) Then
|
||||
AObject := ANodeData.Data;
|
||||
if Not Assigned(AObject) Then
|
||||
Exit;
|
||||
if AObject is TUnitInfo then begin
|
||||
if FilenameIsPascalUnit(TUnitInfo(AObject).Filename) then
|
||||
if not (Data is TProjectNodeData) then exit;
|
||||
NodeData:=TProjectNodeData(Data);
|
||||
Item:=GetNodeItem(NodeData);
|
||||
if Item=nil then exit;
|
||||
|
||||
if Item is TUnitInfo then begin
|
||||
if FilenameIsPascalUnit(TUnitInfo(Item).Filename) then
|
||||
Result:=ImageIndexUnit
|
||||
else if (LazProject<>nil) and (LazProject.MainUnitinfo=Data) then
|
||||
else if (LazProject<>nil) and (LazProject.MainUnitinfo=Item) then
|
||||
Result:=ImageIndexProject
|
||||
else
|
||||
Result:=ImageIndexText;
|
||||
end
|
||||
else if AObject is TPkgDependency then begin
|
||||
if TPkgDependency(AObject).Removed then
|
||||
else if Item is TPkgDependency then begin
|
||||
if TPkgDependency(Item).Removed then
|
||||
Result:=ImageIndexRemovedRequired
|
||||
else if TPkgDependency(AObject).LoadPackageResult=lprSuccess then
|
||||
else if TPkgDependency(Item).LoadPackageResult=lprSuccess then
|
||||
Result:=ImageIndexRequired
|
||||
else
|
||||
Result:=ImageIndexConflict;
|
||||
@ -687,8 +686,7 @@ begin
|
||||
while CurFile<>nil do begin
|
||||
Filename:=CurFile.GetShortFilename(true);
|
||||
if Filename<>'' then Begin
|
||||
ANodeData := CreateNodeData(pntFile, FileName, False);
|
||||
ANodeData.Data := CurFile;
|
||||
ANodeData := CreateNodeData(pntFile, CurFile.Filename, False);
|
||||
FilesBranch.AddNodeData(Filename, ANodeData, CurFile.Filename);
|
||||
end;
|
||||
CurFile:=CurFile.NextPartOfProject;
|
||||
@ -727,8 +725,7 @@ begin
|
||||
NodeText:=Format(lisPckEditDefault, [NodeText, AFilename]);
|
||||
end;
|
||||
// Add the required package under the branch
|
||||
ANodeData := CreateNodeData(pntDependency, NodeText, False);
|
||||
ANodeData.Data := Dependency;
|
||||
ANodeData := CreateNodeData(pntDependency, Dependency.PackageName, False);
|
||||
RequiredBranch.AddNodeData(NodeText, ANodeData);
|
||||
Dependency:=Dependency.NextRequiresDependency;
|
||||
end;
|
||||
@ -746,8 +743,7 @@ begin
|
||||
RemovedBranch:=FilterEdit.GetBranch(RemovedDependenciesNode);
|
||||
// Add all removed dependencies under the branch
|
||||
while Dependency<>nil do begin
|
||||
ANodeData := CreateNodeData(pntDependency, Dependency.AsString, True);
|
||||
ANodeData.Data := Dependency;
|
||||
ANodeData := CreateNodeData(pntDependency, Dependency.PackageName, True);
|
||||
RemovedBranch.AddNodeData(Dependency.AsString, ANodeData);
|
||||
Dependency:=Dependency.NextRequiresDependency;
|
||||
end;
|
||||
@ -822,50 +818,22 @@ end;
|
||||
|
||||
function TProjectInspectorForm.GetSelectedFile: TUnitInfo;
|
||||
var
|
||||
CurNode: TTreeNode;
|
||||
Item: TFileNameItem;
|
||||
ADataNode : TProjectNodeData;
|
||||
AObject : TObject;
|
||||
Item: TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
AObject := NIL;
|
||||
if LazProject=nil then exit;
|
||||
CurNode:=ItemsTreeView.Selected;
|
||||
if (CurNode=nil) then exit;
|
||||
//debugln(['TProjectInspectorForm.GetCurrentFile ',DbgSName(TObject(CurNode.Data)),' ',CurNode.Text]);
|
||||
ADataNode := TProjectNodeData(CurNode.Data);
|
||||
If Assigned(ADataNode) Then
|
||||
AObject := ADataNode;
|
||||
if Assigned(AObject) And (AObject is TFileNameItem) then
|
||||
begin
|
||||
Item:=TFileNameItem(AObject);
|
||||
//debugln(['TProjectInspectorForm.GetCurrentFile Item=',Item.Filename,' ',Item.IsDirectory]);
|
||||
Result:=LazProject.UnitInfoWithFilename(Item.Filename);
|
||||
end;
|
||||
Item:=GetNodeItem(GetNodeData(ItemsTreeView.Selected));
|
||||
if Item is TUnitInfo then
|
||||
Result:=TUnitInfo(Item);
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetSelectedDependency: TPkgDependency;
|
||||
var
|
||||
CurNode: TTreeNode;
|
||||
Branch: TTreeFilterBranch;
|
||||
AnObject: TObject;
|
||||
ADataNode : TProjectNodeData;
|
||||
Item: TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
AnObject := Nil;
|
||||
if LazProject=nil then exit;
|
||||
CurNode:=ItemsTreeView.Selected;
|
||||
if Assigned(CurNode) and Assigned(CurNode.Parent)
|
||||
and ((CurNode.Parent=DependenciesNode) or (CurNode.Parent=RemovedDependenciesNode))
|
||||
then begin
|
||||
Branch:=FilterEdit.GetExistingBranch(CurNode.Parent);
|
||||
Assert(Assigned(Branch));
|
||||
ADataNode := TProjectNodeData(Branch.GetData(CurNode.Index));
|
||||
If Assigned(ADataNode) Then
|
||||
AnObject := ADataNode.Data;
|
||||
if (AnObject <> nil) and (AnObject is TPkgDependency) then
|
||||
Result := TPkgDependency(AnObject);
|
||||
end;
|
||||
Item:=GetNodeItem(GetNodeData(ItemsTreeView.Selected));
|
||||
if Item is TPkgDependency then
|
||||
Result:=TPkgDependency(Item);
|
||||
end;
|
||||
|
||||
constructor TProjectInspectorForm.Create(TheOwner: TComponent);
|
||||
@ -1022,5 +990,36 @@ Begin
|
||||
FProjectNodeDataList[Typ] := Result;
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetNodeData(TVNode: TTreeNode): TProjectNodeData;
|
||||
var
|
||||
o: TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
if (TVNode=nil) then exit;
|
||||
o:=TObject(TVNode.Data);
|
||||
if o is TFileNameItem then
|
||||
o:=TObject(TFileNameItem(o).Data);
|
||||
if o is TProjectNodeData then
|
||||
Result:=TProjectNodeData(o);
|
||||
end;
|
||||
|
||||
function TProjectInspectorForm.GetNodeItem(NodeData: TProjectNodeData): TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
if (LazProject=nil) or (NodeData=nil) then exit;
|
||||
case NodeData.Typ of
|
||||
pntFile:
|
||||
if NodeData.Removed then
|
||||
Result:=nil
|
||||
else
|
||||
Result:=LazProject.UnitInfoWithFilename(NodeData.Name,[pfsfOnlyProjectFiles]);
|
||||
pntDependency:
|
||||
if NodeData.Removed then
|
||||
Result:=LazProject.FindRemovedDependencyByName(NodeData.Name)
|
||||
else
|
||||
Result:=LazProject.FindDependencyByName(NodeData.Name);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -31,16 +31,12 @@ interface
|
||||
|
||||
uses
|
||||
// LCL FCL
|
||||
Classes, SysUtils, Math, Forms, Controls, StdCtrls, ComCtrls, Buttons,
|
||||
LResources, Graphics, LCLType, LCLProc, Menus, Dialogs, FileUtil, AVL_Tree,
|
||||
contnrs, Laz2_XMLCfg,
|
||||
Classes, SysUtils, Forms, Controls, StdCtrls, ComCtrls, Buttons, Graphics, LCLType, LCLProc, Menus, Dialogs, FileUtil,
|
||||
contnrs,
|
||||
// IDEIntf CodeTools
|
||||
IDEImagesIntf, MenuIntf, HelpIntfs, ExtCtrls, LazIDEIntf, ProjectIntf,
|
||||
IDEImagesIntf, MenuIntf, ExtCtrls, LazIDEIntf, ProjectIntf,
|
||||
CodeToolsStructs, FormEditingIntf, TreeFilterEdit, PackageIntf,
|
||||
IDEDialogs, IDEHelpIntf, IDEOptionsIntf,
|
||||
// IDE
|
||||
MainIntf, IDEProcs, LazConf, LazarusIDEStrConsts, IDEOptionDefs, IDEDefs,
|
||||
IDEContextHelpEdit, CompilerOptions, ComponentReg,
|
||||
IDEDialogs, IDEHelpIntf, IDEOptionsIntf, IDEProcs, LazarusIDEStrConsts, IDEDefs, CompilerOptions, ComponentReg,
|
||||
PackageDefs, AddToPackageDlg, PkgVirtualUnitEditor,
|
||||
MissingPkgFilesDlg, PackageSystem, CleanPkgDeps;
|
||||
|
||||
@ -2066,7 +2062,7 @@ end;
|
||||
function TPackageEditorForm.GetNodeItem(NodeData: TPENodeData): TObject;
|
||||
begin
|
||||
Result:=nil;
|
||||
if LazPackage=nil then exit;
|
||||
if (LazPackage=nil) or (NodeData=nil) then exit;
|
||||
case NodeData.Typ of
|
||||
penFile:
|
||||
if NodeData.Removed then
|
||||
|
Loading…
Reference in New Issue
Block a user