mirror of https://gitlab.com/basile.b/dexed.git
added editable symbol list option
This commit is contained in:
parent
2c8182223f
commit
3bf6ba9264
|
@ -167,7 +167,7 @@ class SymbolListBuilder : ASTVisitor
|
||||||
|
|
||||||
final override void visit(const EnumDeclaration decl)
|
final override void visit(const EnumDeclaration decl)
|
||||||
{
|
{
|
||||||
//TODO-ctest: try to see if what dmd outputs as , "enum member" is handled.
|
//TODO-ctest: try to see if what dmd outputs as "enum member" is handled.
|
||||||
namedVisitorImpl!(EnumDeclaration, SymbolType._class)(decl);
|
namedVisitorImpl!(EnumDeclaration, SymbolType._class)(decl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ class SymbolListBuilder : ASTVisitor
|
||||||
final override void visit(const MixinDeclaration decl)
|
final override void visit(const MixinDeclaration decl)
|
||||||
{
|
{
|
||||||
// TODO-cfeature: MixinDeclaration, just display the name of the mixed template.
|
// TODO-cfeature: MixinDeclaration, just display the name of the mixed template.
|
||||||
// the template might be implemented in another module so their cant be displayed.
|
// the template might be implemented in another module so its members cant be displayed.
|
||||||
}
|
}
|
||||||
|
|
||||||
final override void visit(const StructDeclaration decl)
|
final override void visit(const StructDeclaration decl)
|
||||||
|
|
|
@ -40,17 +40,17 @@ inherited CESymbolListWidget: TCESymbolListWidget
|
||||||
Items.Data = {
|
Items.Data = {
|
||||||
F9FFFFFF02000B000000000000000000000000000000FFFFFFFF000000000000
|
F9FFFFFF02000B000000000000000000000000000000FFFFFFFF000000000000
|
||||||
00000005000000416C696173010000000100000001000000FFFFFFFF00000000
|
00000005000000416C696173010000000100000001000000FFFFFFFF00000000
|
||||||
000000000007000000436C6173736573020000000200000002000000FFFFFFFF
|
000000000005000000436C617373020000000200000002000000FFFFFFFF0000
|
||||||
00000000000000000005000000456E756D73030000000300000003000000FFFF
|
0000000000000004000000456E756D030000000300000003000000FFFFFFFF00
|
||||||
FFFF0000000000000000000800000046756E6374696F6E040000000400000004
|
00000000000000000800000046756E6374696F6E040000000400000004000000
|
||||||
000000FFFFFFFF00000000000000000007000000496D706F7274730500000005
|
FFFFFFFF00000000000000000006000000496D706F7274050000000500000005
|
||||||
00000005000000FFFFFFFF00000000000000000009000000496E746572666163
|
000000FFFFFFFF00000000000000000009000000496E74657266616365060000
|
||||||
65060000000600000006000000FFFFFFFF000000000000000000050000004D69
|
000600000006000000FFFFFFFF000000000000000000050000004D6978696E07
|
||||||
78696E070000000700000007000000FFFFFFFF00000000000000000007000000
|
0000000700000007000000FFFFFFFF0000000000000000000600000053747275
|
||||||
53747275637473080000000800000008000000FFFFFFFF000000000000000000
|
6374080000000800000008000000FFFFFFFF0000000000000000000800000054
|
||||||
0900000054656D706C61746573000000000000000000000000FFFFFFFF000000
|
656D706C617465000000000000000000000000FFFFFFFF000000000000000000
|
||||||
00000000000005000000556E696F6E010000000100000001000000FFFFFFFF00
|
05000000556E696F6E010000000100000001000000FFFFFFFF00000000000000
|
||||||
0000000000000000080000005661726961626C65
|
0000080000005661726961626C65
|
||||||
}
|
}
|
||||||
TreeLineColor = 14671839
|
TreeLineColor = 14671839
|
||||||
TreeLinePenStyle = psSolid
|
TreeLinePenStyle = psSolid
|
||||||
|
@ -103,7 +103,7 @@ inherited CESymbolListWidget: TCESymbolListWidget
|
||||||
top = 48
|
top = 48
|
||||||
end
|
end
|
||||||
object imgList: TImageList[2]
|
object imgList: TImageList[2]
|
||||||
left = 80
|
left = 152
|
||||||
top = 48
|
top = 48
|
||||||
Bitmap = {
|
Bitmap = {
|
||||||
4C69090000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
4C69090000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||||
|
|
|
@ -6,8 +6,8 @@ interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, TreeFilterEdit, Forms, Controls, Graphics, ExtCtrls, Menus,
|
Classes, SysUtils, TreeFilterEdit, Forms, Controls, Graphics, ExtCtrls, Menus,
|
||||||
ComCtrls, ce_widget, jsonparser, process, actnlist, Buttons, Clipbrd,
|
ComCtrls, ce_widget, jsonparser, process, actnlist, Buttons, Clipbrd, LCLProc,
|
||||||
ce_common, ce_observer, ce_synmemo, ce_interfaces, LCLProc;
|
ce_common, ce_observer, ce_synmemo, ce_interfaces, ce_writableComponent;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -70,7 +70,26 @@ type
|
||||||
procedure LoadFromTool(str: TStream);
|
procedure LoadFromTool(str: TStream);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TCESymbolListWidget = class(TCEWidget, ICEMultiDocObserver)
|
TCESymbolListOptions = class(TWritableLfmTextComponent)
|
||||||
|
private
|
||||||
|
fAutoRefresh: boolean;
|
||||||
|
fRefreshOnChange: boolean;
|
||||||
|
fRefreshOnFocus: boolean;
|
||||||
|
fShowChildCategories: boolean;
|
||||||
|
fAutoRefreshDelay: Integer;
|
||||||
|
published
|
||||||
|
property autoRefresh: boolean read fAutoRefresh write fAutoRefresh;
|
||||||
|
property refreshOnChange: boolean read fRefreshOnChange write fRefreshOnChange;
|
||||||
|
property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus default true;
|
||||||
|
property showChildCategories: boolean read fShowChildCategories write fShowChildCategories default true;
|
||||||
|
property autoRefreshDelay: Integer read fAutoRefreshDelay write fAutoRefreshDelay default 1500;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
procedure Assign(Source: TPersistent); override;
|
||||||
|
procedure AssignTo(Dest: TPersistent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TCESymbolListWidget = class(TCEWidget, ICEMultiDocObserver, ICEEditableOptions)
|
||||||
btnRefresh: TBitBtn;
|
btnRefresh: TBitBtn;
|
||||||
imgList: TImageList;
|
imgList: TImageList;
|
||||||
Panel1: TPanel;
|
Panel1: TPanel;
|
||||||
|
@ -81,6 +100,7 @@ type
|
||||||
procedure TreeFilterEdit1AfterFilter(Sender: TObject);
|
procedure TreeFilterEdit1AfterFilter(Sender: TObject);
|
||||||
procedure TreeKeyPress(Sender: TObject; var Key: char);
|
procedure TreeKeyPress(Sender: TObject; var Key: char);
|
||||||
private
|
private
|
||||||
|
fOptions: TCESymbolListOptions;
|
||||||
fSyms: TSymbolList;
|
fSyms: TSymbolList;
|
||||||
fMsgs: ICEMessagesDisplay;
|
fMsgs: ICEMessagesDisplay;
|
||||||
fToolProc: TCheckedAsyncProcess;
|
fToolProc: TCheckedAsyncProcess;
|
||||||
|
@ -94,6 +114,7 @@ type
|
||||||
fAutoRefresh: boolean;
|
fAutoRefresh: boolean;
|
||||||
fRefreshOnChange: boolean;
|
fRefreshOnChange: boolean;
|
||||||
fRefreshOnFocus: boolean;
|
fRefreshOnFocus: boolean;
|
||||||
|
fShowChildCategories: boolean;
|
||||||
fToolOutput: TMemoryStream;
|
fToolOutput: TMemoryStream;
|
||||||
ndAlias, ndClass, ndEnum, ndFunc, ndUni: TTreeNode;
|
ndAlias, ndClass, ndEnum, ndFunc, ndUni: TTreeNode;
|
||||||
ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
|
ndImp, ndIntf, ndMix, ndStruct, ndTmp, ndVar: TTreeNode;
|
||||||
|
@ -110,22 +131,18 @@ type
|
||||||
procedure toolOutputData(sender: TObject);
|
procedure toolOutputData(sender: TObject);
|
||||||
procedure toolTerminated(sender: TObject);
|
procedure toolTerminated(sender: TObject);
|
||||||
//
|
//
|
||||||
procedure optget_AutoRefresh(aWriter: TWriter);
|
|
||||||
procedure optset_AutoRefresh(aReader: TReader);
|
|
||||||
procedure optget_RefreshOnChange(aWriter: TWriter);
|
|
||||||
procedure optset_RefreshOnChange(aReader: TReader);
|
|
||||||
procedure optget_RefreshOnFocus(aWriter: TWriter);
|
|
||||||
procedure optset_RefreshOnFocus(aReader: TReader);
|
|
||||||
//
|
|
||||||
procedure docNew(aDoc: TCESynMemo);
|
procedure docNew(aDoc: TCESynMemo);
|
||||||
procedure docClosing(aDoc: TCESynMemo);
|
procedure docClosing(aDoc: TCESynMemo);
|
||||||
procedure docFocused(aDoc: TCESynMemo);
|
procedure docFocused(aDoc: TCESynMemo);
|
||||||
procedure docChanged(aDoc: TCESynMemo);
|
procedure docChanged(aDoc: TCESynMemo);
|
||||||
|
//
|
||||||
|
function optionedWantCategory(): string;
|
||||||
|
function optionedWantEditorKind: TOptionEditorKind;
|
||||||
|
function optionedWantContainer: TPersistent;
|
||||||
|
procedure optionedEvent(anEvent: TOptionEditorEvent);
|
||||||
protected
|
protected
|
||||||
procedure UpdateByDelay; override;
|
procedure UpdateByDelay; override;
|
||||||
//
|
//
|
||||||
procedure sesoptDeclareProperties(aFiler: TFiler); override;
|
|
||||||
//
|
|
||||||
function contextName: string; override;
|
function contextName: string; override;
|
||||||
function contextActionCount: integer; override;
|
function contextActionCount: integer; override;
|
||||||
function contextAction(index: integer): TAction; override;
|
function contextAction(index: integer): TAction; override;
|
||||||
|
@ -143,6 +160,9 @@ type
|
||||||
implementation
|
implementation
|
||||||
{$R *.lfm}
|
{$R *.lfm}
|
||||||
|
|
||||||
|
const
|
||||||
|
OptsFname = 'symbollist.txt';
|
||||||
|
|
||||||
{$REGION Serializable symbols---------------------------------------------------}
|
{$REGION Serializable symbols---------------------------------------------------}
|
||||||
constructor TSymbol.create(ACollection: TCollection);
|
constructor TSymbol.create(ACollection: TCollection);
|
||||||
begin
|
begin
|
||||||
|
@ -204,10 +224,59 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION TCESymbolListOptions --------------------------------------------------}
|
||||||
|
constructor TCESymbolListOptions.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
fRefreshOnFocus := true;
|
||||||
|
fShowChildCategories := true;
|
||||||
|
fAutoRefreshDelay := 1500;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESymbolListOptions.Assign(Source: TPersistent);
|
||||||
|
var
|
||||||
|
widg: TCESymbolListWidget;
|
||||||
|
begin
|
||||||
|
if Source is TCESymbolListWidget then
|
||||||
|
begin
|
||||||
|
widg := TCESymbolListWidget(Source);
|
||||||
|
//
|
||||||
|
fAutoRefreshDelay := widg.updaterByDelayDuration;
|
||||||
|
fRefreshOnFocus := widg.fRefreshOnFocus;
|
||||||
|
fRefreshOnChange := widg.fRefreshOnChange;
|
||||||
|
fAutoRefresh := widg.fAutoRefresh;
|
||||||
|
fShowChildCategories := widg.fShowChildCategories;
|
||||||
|
end
|
||||||
|
else inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESymbolListOptions.AssignTo(Dest: TPersistent);
|
||||||
|
var
|
||||||
|
widg: TCESymbolListWidget;
|
||||||
|
begin
|
||||||
|
if Dest is TCESymbolListWidget then
|
||||||
|
begin
|
||||||
|
widg := TCESymbolListWidget(Dest);
|
||||||
|
//
|
||||||
|
widg.updaterByDelayDuration := fAutoRefreshDelay;
|
||||||
|
widg.fRefreshOnFocus := fRefreshOnFocus;
|
||||||
|
widg.fRefreshOnChange := fRefreshOnChange;
|
||||||
|
widg.fAutoRefresh := fAutoRefresh;
|
||||||
|
widg.fShowChildCategories := fShowChildCategories;
|
||||||
|
//
|
||||||
|
widg.fActAutoRefresh.Checked := fAutoRefresh;
|
||||||
|
widg.fActRefreshOnChange.Checked:= fRefreshOnChange;
|
||||||
|
widg.fActRefreshOnFocus.Checked := fRefreshOnFocus;
|
||||||
|
end
|
||||||
|
else inherited;
|
||||||
|
end;
|
||||||
|
{$ENDREGIOn}
|
||||||
|
|
||||||
{$REGION Standard Comp/Obj------------------------------------------------------}
|
{$REGION Standard Comp/Obj------------------------------------------------------}
|
||||||
constructor TCESymbolListWidget.create(aOwner: TComponent);
|
constructor TCESymbolListWidget.create(aOwner: TComponent);
|
||||||
var
|
var
|
||||||
png: TPortableNetworkGraphic;
|
png: TPortableNetworkGraphic;
|
||||||
|
fname: string;
|
||||||
begin
|
begin
|
||||||
fAutoRefresh := false;
|
fAutoRefresh := false;
|
||||||
fRefreshOnFocus := true;
|
fRefreshOnFocus := true;
|
||||||
|
@ -243,6 +312,12 @@ begin
|
||||||
fSyms := TSymbolList.create(nil);
|
fSyms := TSymbolList.create(nil);
|
||||||
fToolOutput := TMemoryStream.create;
|
fToolOutput := TMemoryStream.create;
|
||||||
//
|
//
|
||||||
|
fOptions := TCESymbolListOptions.Create(nil);
|
||||||
|
fname := getCoeditDocPath + OptsFname;
|
||||||
|
if FileExists(fname) then
|
||||||
|
fOptions.loadFromFile(fname);
|
||||||
|
fOptions.AssignTo(self);
|
||||||
|
//
|
||||||
ndAlias := Tree.Items[0];
|
ndAlias := Tree.Items[0];
|
||||||
ndClass := Tree.Items[1];
|
ndClass := Tree.Items[1];
|
||||||
ndEnum := Tree.Items[2];
|
ndEnum := Tree.Items[2];
|
||||||
|
@ -276,6 +351,10 @@ begin
|
||||||
killProcess(fToolProc);
|
killProcess(fToolProc);
|
||||||
fToolOutput.free;
|
fToolOutput.free;
|
||||||
fSyms.Free;
|
fSyms.Free;
|
||||||
|
//
|
||||||
|
fOptions.saveToFile(getCoeditDocPath + OptsFname);
|
||||||
|
fOptions.Free;
|
||||||
|
//
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -288,49 +367,6 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION ICESessionOptionsObserver ---------------------------------------------}
|
|
||||||
procedure TCESymbolListWidget.optget_AutoRefresh(aWriter: TWriter);
|
|
||||||
begin
|
|
||||||
aWriter.WriteBoolean(fAutoRefresh);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESymbolListWidget.optset_AutoRefresh(aReader: TReader);
|
|
||||||
begin
|
|
||||||
fAutoRefresh := aReader.ReadBoolean;
|
|
||||||
fActAutoRefresh.Checked := fAutoRefresh;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESymbolListWidget.optget_RefreshOnChange(aWriter: TWriter);
|
|
||||||
begin
|
|
||||||
aWriter.WriteBoolean(fRefreshOnChange);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESymbolListWidget.optset_RefreshOnChange(aReader: TReader);
|
|
||||||
begin
|
|
||||||
fRefreshOnChange := aReader.ReadBoolean;
|
|
||||||
fActRefreshOnChange.Checked := fRefreshOnChange;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESymbolListWidget.optget_RefreshOnFocus(aWriter: TWriter);
|
|
||||||
begin
|
|
||||||
aWriter.WriteBoolean(fRefreshOnFocus);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESymbolListWidget.optset_RefreshOnFocus(aReader: TReader);
|
|
||||||
begin
|
|
||||||
fRefreshOnFocus := aReader.ReadBoolean;
|
|
||||||
fActRefreshOnFocus.Checked := fRefreshOnFocus;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TCESymbolListWidget.sesoptDeclareProperties(aFiler: TFiler);
|
|
||||||
begin
|
|
||||||
inherited;
|
|
||||||
aFiler.DefineProperty(Name + '_AutoRefresh', @optset_AutoRefresh, @optget_AutoRefresh, true);
|
|
||||||
aFiler.DefineProperty(Name + '_RefreshOnChange', @optset_RefreshOnChange, @optget_RefreshOnChange, true);
|
|
||||||
aFiler.DefineProperty(Name + '_RefreshOnFocus', @optset_RefreshOnFocus, @optget_RefreshOnFocus, true);
|
|
||||||
end;
|
|
||||||
{$ENDREGION}
|
|
||||||
|
|
||||||
{$REGION ICEContextualActions---------------------------------------------------}
|
{$REGION ICEContextualActions---------------------------------------------------}
|
||||||
function TCESymbolListWidget.contextName: string;
|
function TCESymbolListWidget.contextName: string;
|
||||||
begin
|
begin
|
||||||
|
@ -381,7 +417,31 @@ begin
|
||||||
if Tree.Selected = nil then exit;
|
if Tree.Selected = nil then exit;
|
||||||
Clipboard.AsText:= Tree.Selected.Text;
|
Clipboard.AsText:= Tree.Selected.Text;
|
||||||
end;
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION ICEEditableOptions ----------------------------------------------------}
|
||||||
|
function TCESymbolListWidget.optionedWantCategory(): string;
|
||||||
|
begin
|
||||||
|
exit('Symbol list');
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCESymbolListWidget.optionedWantEditorKind: TOptionEditorKind;
|
||||||
|
begin
|
||||||
|
exit(oekGeneric);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCESymbolListWidget.optionedWantContainer: TPersistent;
|
||||||
|
begin
|
||||||
|
fOptions.Assign(self);
|
||||||
|
exit(fOptions);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESymbolListWidget.optionedEvent(anEvent: TOptionEditorEvent);
|
||||||
|
begin
|
||||||
|
if anEvent <> oeeAccept then exit;
|
||||||
|
fOptions.AssignTo(self);
|
||||||
|
callToolProc;
|
||||||
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION ICEMultiDocObserver ---------------------------------------------------}
|
{$REGION ICEMultiDocObserver ---------------------------------------------------}
|
||||||
|
@ -397,7 +457,6 @@ begin
|
||||||
fDoc := nil;
|
fDoc := nil;
|
||||||
clearTree;
|
clearTree;
|
||||||
updateVisibleCat;
|
updateVisibleCat;
|
||||||
beginUpdateByDelay;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESymbolListWidget.docFocused(aDoc: TCESynMemo);
|
procedure TCESymbolListWidget.docFocused(aDoc: TCESynMemo);
|
||||||
|
@ -541,37 +600,99 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESymbolListWidget.toolTerminated(sender: TObject);
|
procedure TCESymbolListWidget.toolTerminated(sender: TObject);
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
//
|
//
|
||||||
procedure symbolToTreeNode(sym: TSymbol);
|
function getCatNode(node: TTreeNode; stype: TSymbolType ): TTreeNode;
|
||||||
|
begin
|
||||||
|
if node = nil then case stype of
|
||||||
|
_alias : exit(ndAlias);
|
||||||
|
_class : exit(ndClass);
|
||||||
|
_enum : exit(ndEnum);
|
||||||
|
_function : exit(ndFunc);
|
||||||
|
_import : exit(ndImp);
|
||||||
|
_interface: exit(ndIntf);
|
||||||
|
_mixin : exit(ndMix);
|
||||||
|
_struct : exit(ndStruct);
|
||||||
|
_template : exit(ndTmp);
|
||||||
|
_union : exit(ndUni);
|
||||||
|
_variable : exit(ndVar);
|
||||||
|
end else case stype of
|
||||||
|
_alias:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Alias');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Alias');
|
||||||
|
end;
|
||||||
|
_class:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Class');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Class');
|
||||||
|
end;
|
||||||
|
_enum:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Enum');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Enum');
|
||||||
|
end;
|
||||||
|
_function:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Function');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Function');
|
||||||
|
end;
|
||||||
|
_import:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Import');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Import');
|
||||||
|
end;
|
||||||
|
_interface:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Interface');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Interface');
|
||||||
|
end;
|
||||||
|
_mixin:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Mixin');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Mixin');
|
||||||
|
end;
|
||||||
|
_struct:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Struct');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Struct');
|
||||||
|
end;
|
||||||
|
_template:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Template');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Template');
|
||||||
|
end;
|
||||||
|
_union:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Union');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Union');
|
||||||
|
end;
|
||||||
|
_variable:
|
||||||
|
begin
|
||||||
|
result := node.FindNode('Variable');
|
||||||
|
if result = nil then result := node.TreeNodes.AddChild(node, 'Variable');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
procedure symbolToTreeNode(origin: TTreenode; sym: TSymbol);
|
||||||
var
|
var
|
||||||
data: PInt64;
|
data: PInt64;
|
||||||
cat: TTreeNode;
|
cat: TTreeNode;
|
||||||
|
node: TTreeNode;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
case sym.symType of
|
cat := getCatNode(origin, sym.symType);
|
||||||
_alias : cat := ndAlias;
|
|
||||||
_class : cat := ndClass;
|
|
||||||
_enum : cat := ndEnum;
|
|
||||||
_function : cat := ndFunc;
|
|
||||||
_import : cat := ndImp;
|
|
||||||
_interface: cat := ndIntf;
|
|
||||||
_mixin : cat := ndMix;
|
|
||||||
_struct : cat := ndStruct;
|
|
||||||
_template : cat := ndTmp;
|
|
||||||
_union : cat := ndUni;
|
|
||||||
_variable : cat := ndVar;
|
|
||||||
end;
|
|
||||||
data := new(PInt64);
|
data := new(PInt64);
|
||||||
data^ := sym.fline;
|
data^ := sym.fline;
|
||||||
tree.Items.AddChildObject(cat, sym.name, data);
|
node := tree.Items.AddChildObject(cat, sym.name, data);
|
||||||
|
if not fShowChildCategories then node := nil;
|
||||||
cat.Visible:=true;
|
cat.Visible:=true;
|
||||||
//
|
|
||||||
for i := 0 to sym.subs.Count-1 do
|
for i := 0 to sym.subs.Count-1 do
|
||||||
symbolToTreeNode(sym.subs[i]);
|
symbolToTreeNode(node, sym.subs[i]);
|
||||||
end;
|
end;
|
||||||
//
|
//
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
if ndAlias = nil then exit;
|
if ndAlias = nil then exit;
|
||||||
clearTree;
|
clearTree;
|
||||||
|
@ -587,7 +708,7 @@ begin
|
||||||
//
|
//
|
||||||
tree.BeginUpdate;
|
tree.BeginUpdate;
|
||||||
for i := 0 to fSyms.symbols.Count-1 do
|
for i := 0 to fSyms.symbols.Count-1 do
|
||||||
symbolToTreeNode(fSyms.symbols[i]);
|
symbolToTreeNode(nil, fSyms.symbols[i]);
|
||||||
tree.EndUpdate;
|
tree.EndUpdate;
|
||||||
end;
|
end;
|
||||||
{$ENDREGION --------------------------------------------------------------------}
|
{$ENDREGION --------------------------------------------------------------------}
|
||||||
|
|
Loading…
Reference in New Issue