* Patch from Andrey Sobol to improve inheritance tree

git-svn-id: trunk@48169 -
This commit is contained in:
michael 2021-01-18 13:23:52 +00:00
parent d4ad618a70
commit 38b6bb7385
3 changed files with 54 additions and 45 deletions

View File

@ -341,8 +341,10 @@ begin
Continue; Continue;
ObjUnitItem := ObjByUnitItem.Children.NewItem; ObjUnitItem := ObjByUnitItem.Children.NewItem;
ObjUnitItem.Text := AModule.Name; ObjUnitItem.Text := AModule.Name;
ObjUnitItem.addLocal(FixHTMLpath(Allocator.GetFilename(AModule, ClassesSubindex)));
RoutinesUnitItem := RoutinesByUnitItem.Children.NewItem; RoutinesUnitItem := RoutinesByUnitItem.Children.NewItem;
RoutinesUnitItem.Text := AModule.Name; RoutinesUnitItem.Text := AModule.Name;
RoutinesUnitItem.addLocal(FixHTMLpath(Allocator.GetFilename(AModule, ProcsSubindex)));
for j := 0 to AModule.InterfaceSection.Classes.Count-1 do for j := 0 to AModule.InterfaceSection.Classes.Count-1 do
begin begin
Element := TPasClassType(AModule.InterfaceSection.Classes[j]); Element := TPasClassType(AModule.InterfaceSection.Classes[j]);

View File

@ -338,6 +338,8 @@ function THTMLWriter.AppendProcType(CodeEl, TableEl: TDOMElement;
var var
i: Integer; i: Integer;
Arg: TPasArgument; Arg: TPasArgument;
S : String;
begin begin
if Element.Args.Count > 0 then if Element.Args.Count > 0 then
begin begin
@ -347,12 +349,9 @@ begin
begin begin
Arg := TPasArgument(Element.Args[i]); Arg := TPasArgument(Element.Args[i]);
CodeEl := CreateIndentedCodeEl(Indent + 2); CodeEl := CreateIndentedCodeEl(Indent + 2);
S:=AccessNames[Arg.Access];
case Arg.Access of if (S<>'') then
argConst: AppendKw(CodeEl, 'const '); AppendKw(CodeEl,S);
argVar: AppendKw(CodeEl, 'var ');
argOut: AppendKw(CodeEl, 'out ');
end;
AppendText(CodeEl, Arg.Name); AppendText(CodeEl, Arg.Name);
if Assigned(Arg.ArgType) then if Assigned(Arg.ArgType) then
begin begin
@ -1758,12 +1757,25 @@ procedure THTMLWriter.CreateClassMainPage(aClass : TPasClassType);
AppendSym(CodeEl, '>'); AppendSym(CodeEl, '>');
end; end;
procedure AppendInterfaceInfo(ACodeEl : TDomElement ; AThisClass: TPasClassType);
var
i:Integer;
ThisInterface:TPasClassType;
begin
if Assigned(AThisClass) and (AThisClass.Interfaces.count>0) then
begin
for i:=0 to AThisClass.interfaces.count-1 do
begin
ThisInterface:=TPasClassType(AThisClass.Interfaces[i]);
AppendText(ACodeEl,',');
AppendHyperlink(ACodeEl, ThisInterface);
end;
end;
end;
var var
ParaEl,TableEl, TREl, TDEl, CodeEl: TDOMElement; ParaEl,TableEl, TREl, TDEl, CodeEl: TDOMElement;
i: Integer; ThisClass, PrevClass: TPasClassType;
ThisInterface,
ThisClass: TPasClassType;
ThisTreeNode: TPasElementNode; ThisTreeNode: TPasElementNode;
begin begin
//WriteLn('@ClassPageBody.CreateMainPage Class=', AClass.Name); //WriteLn('@ClassPageBody.CreateMainPage Class=', AClass.Name);
@ -1794,25 +1806,6 @@ begin
AppendText(CodeEl, ' '); AppendText(CodeEl, ' ');
AppendKw(CodeEl, UTF8Decode(ObjKindNames[AClass.ObjKind])); AppendKw(CodeEl, UTF8Decode(ObjKindNames[AClass.ObjKind]));
if Assigned(AClass.AncestorType) then
begin
AppendSym(CodeEl, '(');
AppendHyperlink(CodeEl, AClass.AncestorType);
if AClass.Interfaces.count>0 Then
begin
for i:=0 to AClass.interfaces.count-1 do
begin
AppendSym(CodeEl, ', ');
AppendHyperlink(CodeEl,TPasClassType(AClass.Interfaces[i]));
end;
end;
AppendSym(CodeEl, ')');
end;
CreateMemberDeclarations(AClass, AClass.Members,TableEl, not AClass.IsShortDefinition);
AppendText(CreateH2(ContentElement), UTF8Decode(SDocInheritance));
TableEl := CreateTable(ContentElement);
// Now we are using only TreeClass for show inheritance // Now we are using only TreeClass for show inheritance
ThisClass := AClass; ThisTreeNode := Nil; ThisClass := AClass; ThisTreeNode := Nil;
@ -1820,6 +1813,29 @@ begin
ThisTreeNode := TreeInterface.GetPasElNode(AClass) ThisTreeNode := TreeInterface.GetPasElNode(AClass)
else else
ThisTreeNode := TreeClass.GetPasElNode(AClass); ThisTreeNode := TreeClass.GetPasElNode(AClass);
if not Assigned(ThisTreeNode) Then
DoLog('EROOR Tree Class information: '+ThisClass.PathName);
if Assigned(AClass.AncestorType) then
begin
AppendSym(CodeEl, '(');
// Show parent class information
//TODO: Specialized generic classes is not processed now.
// TLazFixedRoundBufferListMemBase as example
AppendHyperlink(CodeEl, AClass.AncestorType);
AppendInterfaceInfo(CodeEl, AClass);
AppendSym(CodeEl, ')');
end;
// Class members
CreateMemberDeclarations(AClass, AClass.Members,TableEl, not AClass.IsShortDefinition);
AppendText(CreateH2(ContentElement), UTF8Decode(SDocInheritance));
TableEl := CreateTable(ContentElement);
// Process tree class information
// First tree class link is to This class
PrevClass:= nil;
while True do while True do
begin begin
TREl := CreateTR(TableEl); TREl := CreateTR(TableEl);
@ -1828,22 +1844,9 @@ begin
CodeEl := CreateCode(CreatePara(TDEl)); CodeEl := CreateCode(CreatePara(TDEl));
// Show class item // Show class item
if Assigned(ThisClass) Then
AppendHyperlink(CodeEl, ThisClass); AppendHyperlink(CodeEl, ThisClass);
//else if Assigned(PrevClass) then // Interfaces from prevClass
// AppendHyperlink(CodeEl, ThisTreeNode); AppendInterfaceInfo(CodeEl, PrevClass);
// Show links to class interfaces
if Assigned(ThisClass) and (ThisClass.Interfaces.count>0) then
begin
for i:=0 to ThisClass.interfaces.count-1 do
begin
ThisInterface:=TPasClassType(ThisClass.Interfaces[i]);
AppendText(CodeEl,',');
AppendHyperlink(CodeEl, ThisInterface);
end;
end;
// short class description
if Assigned(ThisClass) then
AppendShortDescrCell(TREl, ThisClass); AppendShortDescrCell(TREl, ThisClass);
if Assigned(ThisTreeNode) then if Assigned(ThisTreeNode) then
@ -1852,6 +1855,7 @@ begin
TDEl := CreateTD(CreateTR(TableEl)); TDEl := CreateTD(CreateTR(TableEl));
TDEl['align'] := 'center'; TDEl['align'] := 'center';
AppendText(TDEl, '|'); AppendText(TDEl, '|');
PrevClass:= ThisClass;
ThisClass := ThisTreeNode.ParentNode.Element; ThisClass := ThisTreeNode.ParentNode.Element;
ThisTreeNode := ThisTreeNode.ParentNode; ThisTreeNode := ThisTreeNode.ParentNode;
end end
@ -1859,6 +1863,7 @@ begin
begin begin
ThisClass := nil; ThisClass := nil;
ThisTreeNode:= nil; ThisTreeNode:= nil;
PrevClass:= nil;
break; break;
end end
else else

View File

@ -110,6 +110,8 @@ var
visAutomated : Result := 'automated'; visAutomated : Result := 'automated';
visStrictPrivate : Result := 'strictprivate'; visStrictPrivate : Result := 'strictprivate';
visStrictProtected : Result := 'strictprotected'; visStrictProtected : Result := 'strictprotected';
visRequired : Result := 'required';
visOptional : Result := 'optional';
end; end;
end; end;