mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 00:59:30 +02:00
* Added ability to create class chart
git-svn-id: trunk@23194 -
This commit is contained in:
parent
2c26d53f9b
commit
bc60ea4713
@ -201,6 +201,8 @@ type
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
TPasExternalClassType = Class(TPasClassType);
|
||||
TPasExternalModule = Class(TPasModule);
|
||||
|
||||
{ Link entry tree
|
||||
TFPDocEngine stores the root of the entry tree in its property
|
||||
@ -738,7 +740,7 @@ var
|
||||
begin
|
||||
if not CreateNew then
|
||||
exit;
|
||||
Module := TPasModule.Create(s, HPackage);
|
||||
Module := TPasExternalModule.Create(s, HPackage);
|
||||
Module.InterfaceSection := TInterfaceSection.Create('', Module);
|
||||
HPackage.Modules.Add(Module);
|
||||
end;
|
||||
@ -799,7 +801,7 @@ var
|
||||
begin
|
||||
s:= ResolvePackageModule(AName,HPackage,Module,True);
|
||||
// Create node for class
|
||||
Result := TPasClassType.Create(s, Module.InterfaceSection);
|
||||
Result := TPasExternalClassType.Create(s, Module.InterfaceSection);
|
||||
Result.ObjKind := okClass;
|
||||
Module.InterfaceSection.Declarations.Add(Result);
|
||||
Module.InterfaceSection.Classes.Add(Result);
|
||||
|
@ -2395,7 +2395,7 @@ procedure THTMLWriter.CreateClassHierarchyPage(AList : TStringList; AddUnit : Bo
|
||||
end
|
||||
end
|
||||
else
|
||||
AppendText(CurOutputNode,P.Name);
|
||||
AppendText(CurOutputNode,EN);
|
||||
LL:=TStringList.Create;
|
||||
try
|
||||
N:=E.FirstChild;
|
||||
@ -2480,7 +2480,8 @@ begin
|
||||
For I:=0 to Package.Modules.Count-1 do
|
||||
begin
|
||||
M:=TPasModule(Package.Modules[i]);
|
||||
Self.AddElementsFromList(L,M.InterfaceSection.Classes,True)
|
||||
if Not (M is TPasExternalModule) then
|
||||
Self.AddElementsFromList(L,M.InterfaceSection.Classes,True)
|
||||
end;
|
||||
AppendMenuBar(ClassHierarchySubIndex);
|
||||
S:=Package.Name;
|
||||
|
@ -18,7 +18,7 @@ Type
|
||||
Protected
|
||||
function LookForElement(PE: TDomElement; AElement: TPasElement): TDomNode;
|
||||
function NodeMatch(N: TDomNode; AElement: TPasElement): Boolean;
|
||||
Function AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
|
||||
Function AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement;
|
||||
Public
|
||||
Constructor Create(APackage : TPasPackage; AObjectKind : TPasObjKind = okClass);
|
||||
Destructor Destroy; override;
|
||||
@ -74,14 +74,18 @@ end;
|
||||
Function TClassTreeBuilder.NodeMatch(N : TDomNode; AElement : TPasElement) : Boolean;
|
||||
|
||||
Var
|
||||
S : String;
|
||||
PN,S : String;
|
||||
|
||||
begin
|
||||
Result:=(N.NodeType=ELEMENT_NODE);
|
||||
if Result then
|
||||
begin
|
||||
S:=N.NodeName;
|
||||
S:=FPackage.Name+'.'+TDomElement(N)['unit']+'.'+S;
|
||||
IF Assigned(Aelement.GetModule) then
|
||||
PN:=Aelement.GetModule.PackageName
|
||||
else
|
||||
PN:=FPackage.Name;
|
||||
S:='#'+PN+'.'+TDomElement(N)['unit']+S;
|
||||
Result:= (CompareText(S,AElement.PathName)=0)
|
||||
end;
|
||||
end;
|
||||
@ -96,20 +100,21 @@ begin
|
||||
While (Result<>Nil) and Not NodeMatch(Result,AElement) do
|
||||
Result:=Result.NextSibling;
|
||||
If (Result=Nil) then
|
||||
begin
|
||||
N:=PE.FirstChild;
|
||||
While (Result=Nil) and (N<>Nil) do
|
||||
if Assigned(PE) then
|
||||
begin
|
||||
if (N.NodeType=ELEMENT_NODE) then
|
||||
N:=PE.FirstChild;
|
||||
While (Result=Nil) and (N<>Nil) do
|
||||
begin
|
||||
Result:=LookForElement(N as TDomElement,AElement);
|
||||
if (N.NodeType=ELEMENT_NODE) then
|
||||
begin
|
||||
Result:=LookForElement(N as TDomElement,AElement);
|
||||
end;
|
||||
N:=N.NextSibling;
|
||||
end;
|
||||
N:=N.NextSibling;
|
||||
end;
|
||||
end
|
||||
end;
|
||||
|
||||
Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; Var ACount : Integer) : TDomElement;
|
||||
Function TClassTreeBuilder.AddToClassTree(AElement : TPasElement; ACount : Integer) : TDomElement;
|
||||
|
||||
Var
|
||||
PC : TPasClassType;
|
||||
@ -123,14 +128,21 @@ begin
|
||||
Result:=FTreeStart
|
||||
else If (AElement is TPasClassType) then
|
||||
begin
|
||||
Writeln('Doing ',AElement.Name);
|
||||
if (AElement=FParentObject) then
|
||||
Result:=FTreeStart
|
||||
else
|
||||
begin
|
||||
PC:=AElement as TPasClassType;
|
||||
PE:=AddToClassTree(PC.AncestorType,ACount);
|
||||
N:=LookForElement(PE,AElement);
|
||||
PE:=AddToClassTree(PC.AncestorType,ACount+1);
|
||||
if PE=Nil then
|
||||
begin
|
||||
Write('Name ',PC.Name,' parent ');
|
||||
if Assigned(PC.AncestorType) then
|
||||
Write('(Name: ',PC.AncestorType.Name,' Type:',PC.ANcestorType.ClassName,')');
|
||||
PE:=FClassTree.CreateElement(PC.AncestorType.Name);
|
||||
FTreeStart.AppendChild(PE);
|
||||
end;
|
||||
N:=LookForElement(PE,PC);
|
||||
If (N<>Nil) then
|
||||
Result:=N as TDomElement
|
||||
else
|
||||
@ -143,13 +155,6 @@ begin
|
||||
if Assigned(M) then
|
||||
Result['unit']:=M.Name;
|
||||
end;
|
||||
if (PE=FTreeStart) then
|
||||
begin
|
||||
Writeln('Adding to tree start :',AELement.Name);
|
||||
Writeln('Have ancestor : ',PC.AncestorType<>Nil);
|
||||
if (PC.AncestorType<>Nil) then
|
||||
Writeln(PC.AncestorType.ClassName, ' : '+PC.AncestorType.Name);
|
||||
end;
|
||||
PE.AppendChild(Result);
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user