mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-05 07:00:27 +01:00
cody: unit deps: refresh
git-svn-id: trunk@41766 -
This commit is contained in:
parent
d7ba1292a3
commit
7d743aacab
@ -102,12 +102,12 @@ end;
|
|||||||
|
|
||||||
constructor TUGGroups.Create(Graph: TUsesGraph);
|
constructor TUGGroups.Create(Graph: TUsesGraph);
|
||||||
begin
|
begin
|
||||||
FGroups:=TAVLTree.Create(@CompareUGGroupNames);
|
|
||||||
if (not Graph.UnitClass.InheritsFrom(TUGGroup))
|
if (not Graph.UnitClass.InheritsFrom(TUGGroup))
|
||||||
and ((Graph.FilesTree.Count>0) or (Graph.QueuedFilesTree.Count>0)
|
and ((Graph.FilesTree.Count>0) or (Graph.QueuedFilesTree.Count>0)
|
||||||
or (Graph.TargetFilesTree.Count>0))
|
or (Graph.TargetFilesTree.Count>0))
|
||||||
then
|
then
|
||||||
raise Exception.Create('TUGGroups.Create Create TUGGroups before adding units');
|
raise Exception.Create('TUGGroups.Create You must create TUGGroups before adding units');
|
||||||
|
FGroups:=TAVLTree.Create(@CompareUGGroupNames);
|
||||||
Graph.UnitClass:=TUGGroupUnit;
|
Graph.UnitClass:=TUGGroupUnit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -120,6 +120,7 @@ end;
|
|||||||
|
|
||||||
procedure TUGGroups.Clear;
|
procedure TUGGroups.Clear;
|
||||||
begin
|
begin
|
||||||
|
if FGroups=nil then exit;
|
||||||
fClearing:=true;
|
fClearing:=true;
|
||||||
try
|
try
|
||||||
FGroups.FreeAndClear;
|
FGroups.FreeAndClear;
|
||||||
|
|||||||
@ -373,6 +373,7 @@ object UnitDependenciesWindow: TUnitDependenciesWindow
|
|||||||
AutoSize = True
|
AutoSize = True
|
||||||
BorderSpacing.Around = 2
|
BorderSpacing.Around = 2
|
||||||
Caption = 'RefreshButton'
|
Caption = 'RefreshButton'
|
||||||
|
OnClick = RefreshButtonClick
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
end
|
end
|
||||||
object StatsLabel: TLabel
|
object StatsLabel: TLabel
|
||||||
|
|||||||
@ -24,7 +24,6 @@
|
|||||||
IDE Window showing dependencies of units and packages.
|
IDE Window showing dependencies of units and packages.
|
||||||
|
|
||||||
ToDo:
|
ToDo:
|
||||||
- add refresh button to rescan
|
|
||||||
- delay update pages when not visible
|
- delay update pages when not visible
|
||||||
- update pages when becoming visible
|
- update pages when becoming visible
|
||||||
- additional files as start units
|
- additional files as start units
|
||||||
@ -145,6 +144,7 @@ type
|
|||||||
procedure AllUnitsSearchPrevSpeedButtonClick(Sender: TObject);
|
procedure AllUnitsSearchPrevSpeedButtonClick(Sender: TObject);
|
||||||
procedure AllUnitsShowDirsSpeedButtonClick(Sender: TObject);
|
procedure AllUnitsShowDirsSpeedButtonClick(Sender: TObject);
|
||||||
procedure AllUnitsShowGroupNodesSpeedButtonClick(Sender: TObject);
|
procedure AllUnitsShowGroupNodesSpeedButtonClick(Sender: TObject);
|
||||||
|
procedure RefreshButtonClick(Sender: TObject);
|
||||||
procedure UnitsTreeViewShowHint(Sender: TObject; HintInfo: PHintInfo);
|
procedure UnitsTreeViewShowHint(Sender: TObject; HintInfo: PHintInfo);
|
||||||
procedure UnitsTreeViewMouseDown(Sender: TObject; Button: TMouseButton;
|
procedure UnitsTreeViewMouseDown(Sender: TObject; Button: TMouseButton;
|
||||||
Shift: TShiftState; X, Y: Integer);
|
Shift: TShiftState; X, Y: Integer);
|
||||||
@ -172,6 +172,9 @@ type
|
|||||||
FIdleConnected: boolean;
|
FIdleConnected: boolean;
|
||||||
FUsesGraph: TUsesGraph;
|
FUsesGraph: TUsesGraph;
|
||||||
FGroups: TUGGroups; // referenced by Nodes.Data of GroupsLvlGraph
|
FGroups: TUGGroups; // referenced by Nodes.Data of GroupsLvlGraph
|
||||||
|
FNewUsesGraph: TUsesGraph; // on idle the units are scanned and this graph
|
||||||
|
// is filled up, when parsing is complete it becomes the new UsesGraph
|
||||||
|
FNewGroups: TUGGroups;
|
||||||
FAllUnitsRootUDNode: TUDNode;
|
FAllUnitsRootUDNode: TUDNode;
|
||||||
FSelUnitsRootUDNode: TUDNode;
|
FSelUnitsRootUDNode: TUDNode;
|
||||||
FFlags: TUDWFlags;
|
FFlags: TUDWFlags;
|
||||||
@ -185,6 +188,7 @@ type
|
|||||||
function CreateSelUnitsTree: TUDNode;
|
function CreateSelUnitsTree: TUDNode;
|
||||||
procedure CreateTVNodes(TV: TTreeView;
|
procedure CreateTVNodes(TV: TTreeView;
|
||||||
ParentTVNode: TTreeNode; ParentUDNode: TUDNode);
|
ParentTVNode: TTreeNode; ParentUDNode: TUDNode);
|
||||||
|
procedure FreeUsesGraph;
|
||||||
procedure SelectNextSearchTV(TV: TTreeView; StartTVNode: TTreeNode;
|
procedure SelectNextSearchTV(TV: TTreeView; StartTVNode: TTreeNode;
|
||||||
SearchNext, SkipStart: boolean);
|
SearchNext, SkipStart: boolean);
|
||||||
procedure SetCurrentUnit(AValue: TUGUnit);
|
procedure SetCurrentUnit(AValue: TUGUnit);
|
||||||
@ -194,6 +198,7 @@ type
|
|||||||
function CreatePackageGroup(APackage: TIDEPackage): TUGGroup;
|
function CreatePackageGroup(APackage: TIDEPackage): TUGGroup;
|
||||||
procedure CreateFPCSrcGroups;
|
procedure CreateFPCSrcGroups;
|
||||||
procedure GuessGroupOfUnits;
|
procedure GuessGroupOfUnits;
|
||||||
|
procedure StartParsing;
|
||||||
procedure AddStartAndTargetUnits;
|
procedure AddStartAndTargetUnits;
|
||||||
procedure AddAdditionalFilesAsStartUnits;
|
procedure AddAdditionalFilesAsStartUnits;
|
||||||
procedure SetupGroupsTabSheet;
|
procedure SetupGroupsTabSheet;
|
||||||
@ -322,8 +327,6 @@ procedure TUnitDependenciesWindow.FormCreate(Sender: TObject);
|
|||||||
begin
|
begin
|
||||||
FUsesGraph:=CodeToolBoss.CreateUsesGraph;
|
FUsesGraph:=CodeToolBoss.CreateUsesGraph;
|
||||||
FGroups:=TUGGroups.Create(FUsesGraph);
|
FGroups:=TUGGroups.Create(FUsesGraph);
|
||||||
ProgressBar1.Style:=pbstMarquee;
|
|
||||||
AddStartAndTargetUnits;
|
|
||||||
|
|
||||||
fImgIndexProject := IDEImages.LoadImage(16, 'item_project');
|
fImgIndexProject := IDEImages.LoadImage(16, 'item_project');
|
||||||
fImgIndexUnit := IDEImages.LoadImage(16, 'item_unit');
|
fImgIndexUnit := IDEImages.LoadImage(16, 'item_unit');
|
||||||
@ -332,15 +335,14 @@ begin
|
|||||||
AllUnitsTreeView.Images:=IDEImages.Images_16;
|
AllUnitsTreeView.Images:=IDEImages.Images_16;
|
||||||
|
|
||||||
Caption:='Unit Dependencies';
|
Caption:='Unit Dependencies';
|
||||||
|
RefreshButton.Caption:='Refresh';
|
||||||
StatsLabel.Caption:='Scanning';
|
|
||||||
|
|
||||||
MainPageControl.ActivePage:=UnitsTabSheet;
|
MainPageControl.ActivePage:=UnitsTabSheet;
|
||||||
|
|
||||||
SetupUnitsTabSheet;
|
SetupUnitsTabSheet;
|
||||||
SetupGroupsTabSheet;
|
SetupGroupsTabSheet;
|
||||||
|
|
||||||
IdleConnected:=true;
|
StartParsing;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TUnitDependenciesWindow.AllUnitsSearchEditChange(Sender: TObject);
|
procedure TUnitDependenciesWindow.AllUnitsSearchEditChange(Sender: TObject);
|
||||||
@ -389,6 +391,12 @@ begin
|
|||||||
IdleConnected:=true;
|
IdleConnected:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TUnitDependenciesWindow.RefreshButtonClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if udwParsing in FFlags then exit;
|
||||||
|
StartParsing;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TUnitDependenciesWindow.UnitsTreeViewShowHint(Sender: TObject;
|
procedure TUnitDependenciesWindow.UnitsTreeViewShowHint(Sender: TObject;
|
||||||
HintInfo: PHintInfo);
|
HintInfo: PHintInfo);
|
||||||
var
|
var
|
||||||
@ -470,12 +478,10 @@ end;
|
|||||||
procedure TUnitDependenciesWindow.FormDestroy(Sender: TObject);
|
procedure TUnitDependenciesWindow.FormDestroy(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
IdleConnected:=false;
|
IdleConnected:=false;
|
||||||
GroupsLvlGraph.Clear;
|
|
||||||
UnitsLvlGraph.Clear;
|
FreeUsesGraph;
|
||||||
FreeAndNil(FGroups);
|
FreeAndNil(FNewGroups);
|
||||||
FreeAndNil(FAllUnitsRootUDNode);
|
FreeAndNil(FNewUsesGraph);
|
||||||
FreeAndNil(FSelUnitsRootUDNode);
|
|
||||||
FreeAndNil(FUsesGraph);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TUnitDependenciesWindow.GroupsLvlGraphSelectionChanged(Sender: TObject
|
procedure TUnitDependenciesWindow.GroupsLvlGraphSelectionChanged(Sender: TObject
|
||||||
@ -489,13 +495,24 @@ var
|
|||||||
Completed: boolean;
|
Completed: boolean;
|
||||||
begin
|
begin
|
||||||
if udwParsing in FFlags then begin
|
if udwParsing in FFlags then begin
|
||||||
UsesGraph.Parse(true,Completed,200);
|
fNewUsesGraph.Parse(true,Completed,200);
|
||||||
if Completed then begin
|
if Completed then begin
|
||||||
Exclude(FFlags,udwParsing);
|
Exclude(FFlags,udwParsing);
|
||||||
|
// free old uses graph
|
||||||
|
FreeUsesGraph;
|
||||||
|
// switch to new UsesGraph
|
||||||
|
FUsesGraph:=FNewUsesGraph;
|
||||||
|
FNewUsesGraph:=nil;
|
||||||
|
FGroups:=FNewGroups;
|
||||||
|
FNewGroups:=nil;
|
||||||
|
// create Groups
|
||||||
CreateGroups;
|
CreateGroups;
|
||||||
|
// hide progress bar and update stats
|
||||||
ProgressBar1.Visible:=false;
|
ProgressBar1.Visible:=false;
|
||||||
ProgressBar1.Style:=pbstNormal;
|
ProgressBar1.Style:=pbstNormal;
|
||||||
StatsLabel.Caption:='Units: '+IntToStr(UsesGraph.FilesTree.Count);
|
StatsLabel.Caption:='Units: '+IntToStr(UsesGraph.FilesTree.Count);
|
||||||
|
RefreshButton.Enabled:=true;
|
||||||
|
// update controls
|
||||||
UpdateAll;
|
UpdateAll;
|
||||||
end;
|
end;
|
||||||
end else if udwNeedUpdateGroupsLvlGraph in FFlags then
|
end else if udwNeedUpdateGroupsLvlGraph in FFlags then
|
||||||
@ -663,6 +680,8 @@ procedure TUnitDependenciesWindow.CreateGroups;
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
if FGroups=nil then
|
||||||
|
RaiseCatchableException('');
|
||||||
CreateProjectGroup(LazarusIDE.ActiveProject);
|
CreateProjectGroup(LazarusIDE.ActiveProject);
|
||||||
for i:=0 to PackageEditingInterface.GetPackageCount-1 do
|
for i:=0 to PackageEditingInterface.GetPackageCount-1 do
|
||||||
CreatePackageGroup(PackageEditingInterface.GetPackages(i));
|
CreatePackageGroup(PackageEditingInterface.GetPackages(i));
|
||||||
@ -828,6 +847,25 @@ begin
|
|||||||
FreeAndNil(Owners);
|
FreeAndNil(Owners);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TUnitDependenciesWindow.StartParsing;
|
||||||
|
begin
|
||||||
|
if (FNewUsesGraph<>nil) or (udwParsing in FFlags) then
|
||||||
|
RaiseCatchableException('');
|
||||||
|
Include(FFlags,udwParsing);
|
||||||
|
|
||||||
|
ProgressBar1.Visible:=true;
|
||||||
|
ProgressBar1.Style:=pbstMarquee;
|
||||||
|
StatsLabel.Caption:='Scanning ...';
|
||||||
|
RefreshButton.Enabled:=false;
|
||||||
|
|
||||||
|
FNewUsesGraph:=CodeToolBoss.CreateUsesGraph;
|
||||||
|
FNewGroups:=TUGGroups.Create(FNewUsesGraph);
|
||||||
|
|
||||||
|
AddStartAndTargetUnits;
|
||||||
|
|
||||||
|
IdleConnected:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TUnitDependenciesWindow.SetCurrentUnit(AValue: TUGUnit);
|
procedure TUnitDependenciesWindow.SetCurrentUnit(AValue: TUGUnit);
|
||||||
begin
|
begin
|
||||||
if FCurrentUnit=AValue then Exit;
|
if FCurrentUnit=AValue then Exit;
|
||||||
@ -1057,13 +1095,12 @@ var
|
|||||||
j: Integer;
|
j: Integer;
|
||||||
PkgFile: TLazPackageFile;
|
PkgFile: TLazPackageFile;
|
||||||
begin
|
begin
|
||||||
Include(FFlags,udwParsing);
|
FNewUsesGraph.TargetAll:=true;
|
||||||
UsesGraph.TargetAll:=true;
|
|
||||||
|
|
||||||
// project lpr
|
// project lpr
|
||||||
aProject:=LazarusIDE.ActiveProject;
|
aProject:=LazarusIDE.ActiveProject;
|
||||||
if (aProject<>nil) and (aProject.MainFile<>nil) then
|
if (aProject<>nil) and (aProject.MainFile<>nil) then
|
||||||
UsesGraph.AddStartUnit(aProject.MainFile.Filename);
|
FNewUsesGraph.AddStartUnit(aProject.MainFile.Filename);
|
||||||
|
|
||||||
// add all open packages
|
// add all open packages
|
||||||
if SearchPkgsCheckBox.Checked then begin
|
if SearchPkgsCheckBox.Checked then begin
|
||||||
@ -1075,7 +1112,7 @@ begin
|
|||||||
if PkgFile.Removed then continue;
|
if PkgFile.Removed then continue;
|
||||||
aFilename:=PkgFile.GetFullFilename;
|
aFilename:=PkgFile.GetFullFilename;
|
||||||
if FilenameIsPascalUnit(AFilename) then
|
if FilenameIsPascalUnit(AFilename) then
|
||||||
UsesGraph.AddStartUnit(AFilename);
|
FNewUsesGraph.AddStartUnit(AFilename);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1086,7 +1123,7 @@ begin
|
|||||||
SrcEdit:=SourceEditorManagerIntf.SourceEditors[i];
|
SrcEdit:=SourceEditorManagerIntf.SourceEditors[i];
|
||||||
AFilename:=SrcEdit.FileName;
|
AFilename:=SrcEdit.FileName;
|
||||||
if FilenameIsPascalUnit(AFilename) then
|
if FilenameIsPascalUnit(AFilename) then
|
||||||
UsesGraph.AddStartUnit(AFilename);
|
FNewUsesGraph.AddStartUnit(AFilename);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1118,7 +1155,7 @@ begin
|
|||||||
if Files<>nil then begin
|
if Files<>nil then begin
|
||||||
for i:=0 to Files.Count-1 do begin
|
for i:=0 to Files.Count-1 do begin
|
||||||
if FilenameIsPascalUnit(Files[i]) then
|
if FilenameIsPascalUnit(Files[i]) then
|
||||||
UsesGraph.AddStartUnit(aFilename+Files[i]);
|
fNewUsesGraph.AddStartUnit(aFilename+Files[i]);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
@ -1126,7 +1163,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
// add a single file
|
// add a single file
|
||||||
UsesGraph.AddStartUnit(aFilename);
|
fNewUsesGraph.AddStartUnit(aFilename);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1394,6 +1431,16 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TUnitDependenciesWindow.FreeUsesGraph;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FAllUnitsRootUDNode);
|
||||||
|
FreeAndNil(FSelUnitsRootUDNode);
|
||||||
|
GroupsLvlGraph.Clear;
|
||||||
|
UnitsLvlGraph.Clear;
|
||||||
|
FreeAndNil(FGroups);
|
||||||
|
FreeAndNil(FUsesGraph);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TUnitDependenciesWindow.UpdateAllUnitsTreeView;
|
procedure TUnitDependenciesWindow.UpdateAllUnitsTreeView;
|
||||||
var
|
var
|
||||||
TV: TTreeView;
|
TV: TTreeView;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user