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