* Added ability to create class chart

git-svn-id: trunk@23194 -
This commit is contained in:
michael 2012-12-20 15:54:24 +00:00
parent 2c26d53f9b
commit bc60ea4713
3 changed files with 33 additions and 25 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;