mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-02 20:58:23 +02:00
codetools: handlerlist for treetoolchanged
git-svn-id: trunk@33555 -
This commit is contained in:
parent
be7664ee49
commit
f05fbd0a1f
@ -40,7 +40,7 @@ uses
|
|||||||
{$IFDEF MEM_CHECK}
|
{$IFDEF MEM_CHECK}
|
||||||
MemCheck,
|
MemCheck,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Classes, SysUtils, contnrs, TypInfo, FileProcs, BasicCodeTools,
|
Classes, SysUtils, contnrs, LazMethodList, TypInfo, FileProcs, BasicCodeTools,
|
||||||
CodeToolsStrConsts,
|
CodeToolsStrConsts,
|
||||||
LazFileCache,
|
LazFileCache,
|
||||||
EventCodeTool, CodeTree, CodeAtom, SourceChanger, DefineTemplates, CodeCache,
|
EventCodeTool, CodeTree, CodeAtom, SourceChanger, DefineTemplates, CodeCache,
|
||||||
@ -71,6 +71,12 @@ type
|
|||||||
|
|
||||||
ECodeToolManagerError = class(Exception);
|
ECodeToolManagerError = class(Exception);
|
||||||
|
|
||||||
|
TCodeToolManagerHandler = (
|
||||||
|
ctmOnToolTreeChanging
|
||||||
|
);
|
||||||
|
TCodeToolManagerHandlers = set of TCodeToolManagerHandler;
|
||||||
|
TOnToolTreeChanging = TCodeTreeChangeEvent;
|
||||||
|
|
||||||
{ TCodeToolManager }
|
{ TCodeToolManager }
|
||||||
|
|
||||||
TCodeToolManager = class(TPersistent)
|
TCodeToolManager = class(TPersistent)
|
||||||
@ -114,6 +120,7 @@ type
|
|||||||
FWriteExceptions: boolean;
|
FWriteExceptions: boolean;
|
||||||
FWriteLockCount: integer;// Set/Unset counter
|
FWriteLockCount: integer;// Set/Unset counter
|
||||||
FWriteLockStep: integer; // current write lock ID
|
FWriteLockStep: integer; // current write lock ID
|
||||||
|
FHandlers: array[TCodeToolManagerHandler] of TMethodList;
|
||||||
function OnScannerGetInitValues(Code: Pointer;
|
function OnScannerGetInitValues(Code: Pointer;
|
||||||
out AChangeStep: integer): TExpressionEvaluator;
|
out AChangeStep: integer): TExpressionEvaluator;
|
||||||
procedure OnDefineTreeReadValue(Sender: TObject; const VariableName: string;
|
procedure OnDefineTreeReadValue(Sender: TObject; const VariableName: string;
|
||||||
@ -166,6 +173,8 @@ type
|
|||||||
const UnitSet, AnUnitName: string): string;
|
const UnitSet, AnUnitName: string): string;
|
||||||
procedure DirectoryCachePoolIterateFPCUnitsFromSet(const UnitSet: string;
|
procedure DirectoryCachePoolIterateFPCUnitsFromSet(const UnitSet: string;
|
||||||
const Iterate: TCTOnIterateFile);
|
const Iterate: TCTOnIterateFile);
|
||||||
|
procedure AddHandler(HandlerType: TCodeToolManagerHandler; const Handler: TMethod);
|
||||||
|
procedure RemoveHandler(HandlerType: TCodeToolManagerHandler; const Handler: TMethod);
|
||||||
public
|
public
|
||||||
DefinePool: TDefinePool; // definition templates (rules)
|
DefinePool: TDefinePool; // definition templates (rules)
|
||||||
DefineTree: TDefineTree; // cache for defines (e.g. initial compiler values)
|
DefineTree: TDefineTree; // cache for defines (e.g. initial compiler values)
|
||||||
@ -193,6 +202,8 @@ type
|
|||||||
property CodeNodeTreeChangeStep: integer read FCodeNodeTreeChangeStep;// nodes altered, added, deleted
|
property CodeNodeTreeChangeStep: integer read FCodeNodeTreeChangeStep;// nodes altered, added, deleted
|
||||||
property CodeTreeNodesDeletedStep: integer read FCodeTreeNodesDeletedStep;// nodes deleted
|
property CodeTreeNodesDeletedStep: integer read FCodeTreeNodesDeletedStep;// nodes deleted
|
||||||
procedure GetCodeTreeNodesDeletedStep(out NodesDeletedStep: integer);// use this for events
|
procedure GetCodeTreeNodesDeletedStep(out NodesDeletedStep: integer);// use this for events
|
||||||
|
procedure AddHandlerToolTreeChanging(const OnToolTreeChanging: TOnToolTreeChanging);
|
||||||
|
procedure RemoveHandlerToolTreeChanging(const OnToolTreeChanging: TOnToolTreeChanging);
|
||||||
|
|
||||||
// file handling
|
// file handling
|
||||||
property SourceExtensions: string
|
property SourceExtensions: string
|
||||||
@ -929,6 +940,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCodeToolManager.Destroy;
|
destructor TCodeToolManager.Destroy;
|
||||||
|
var
|
||||||
|
e: TCodeToolManagerHandler;
|
||||||
begin
|
begin
|
||||||
{$IFDEF CTDEBUG}
|
{$IFDEF CTDEBUG}
|
||||||
DebugLn('[TCodeToolManager.Destroy] A');
|
DebugLn('[TCodeToolManager.Destroy] A');
|
||||||
@ -969,6 +982,8 @@ begin
|
|||||||
OnFileAgeCached:=nil;
|
OnFileAgeCached:=nil;
|
||||||
FreeAndNil(DirectoryCachePool);
|
FreeAndNil(DirectoryCachePool);
|
||||||
FreeAndNil(FPCDefinesCache);
|
FreeAndNil(FPCDefinesCache);
|
||||||
|
for e:=low(FHandlers) to high(FHandlers) do
|
||||||
|
FreeAndNil(FHandlers[e]);
|
||||||
{$IFDEF CTDEBUG}
|
{$IFDEF CTDEBUG}
|
||||||
DebugLn('[TCodeToolManager.Destroy] F');
|
DebugLn('[TCodeToolManager.Destroy] F');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -5217,6 +5232,8 @@ end;
|
|||||||
|
|
||||||
procedure TCodeToolManager.OnToolTreeChange(Tool: TCustomCodeTool;
|
procedure TCodeToolManager.OnToolTreeChange(Tool: TCustomCodeTool;
|
||||||
NodesDeleting: boolean);
|
NodesDeleting: boolean);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
CTIncreaseChangeStamp(FCodeNodeTreeChangeStep);
|
CTIncreaseChangeStamp(FCodeNodeTreeChangeStep);
|
||||||
if NodesDeleting then begin
|
if NodesDeleting then begin
|
||||||
@ -5224,7 +5241,10 @@ begin
|
|||||||
// Note: IdentifierList nodes do not need to be cleared, because Node
|
// Note: IdentifierList nodes do not need to be cleared, because Node
|
||||||
// is accessed via GetNode, which checks if nodes were deleted
|
// is accessed via GetNode, which checks if nodes were deleted
|
||||||
end;
|
end;
|
||||||
|
//debugln(['TCodeToolManager.OnToolTreeChange ',FHandlers[ctmOnToolTreeChanging].Count]);
|
||||||
|
i:=FHandlers[ctmOnToolTreeChanging].Count;
|
||||||
|
while FHandlers[ctmOnToolTreeChanging].NextDownIndex(i) do
|
||||||
|
TOnToolTreeChanging(FHandlers[ctmOnToolTreeChanging][i])(Tool,NodesDeleting);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCodeToolManager.OnScannerProgress(Sender: TLinkScanner): boolean;
|
function TCodeToolManager.OnScannerProgress(Sender: TLinkScanner): boolean;
|
||||||
@ -5571,6 +5591,18 @@ begin
|
|||||||
NodesDeletedStep:=FCodeTreeNodesDeletedStep;
|
NodesDeletedStep:=FCodeTreeNodesDeletedStep;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolManager.AddHandlerToolTreeChanging(
|
||||||
|
const OnToolTreeChanging: TOnToolTreeChanging);
|
||||||
|
begin
|
||||||
|
AddHandler(ctmOnToolTreeChanging,TMethod(OnToolTreeChanging));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolManager.RemoveHandlerToolTreeChanging(
|
||||||
|
const OnToolTreeChanging: TOnToolTreeChanging);
|
||||||
|
begin
|
||||||
|
RemoveHandler(ctmOnToolTreeChanging,TMethod(OnToolTreeChanging));
|
||||||
|
end;
|
||||||
|
|
||||||
function TCodeToolManager.GetResourceTool: TResourceCodeTool;
|
function TCodeToolManager.GetResourceTool: TResourceCodeTool;
|
||||||
begin
|
begin
|
||||||
if FResourceTool=nil then FResourceTool:=TResourceCodeTool.Create;
|
if FResourceTool=nil then FResourceTool:=TResourceCodeTool.Create;
|
||||||
@ -5707,6 +5739,21 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolManager.AddHandler(HandlerType: TCodeToolManagerHandler;
|
||||||
|
const Handler: TMethod);
|
||||||
|
begin
|
||||||
|
if Handler.Code=nil then RaiseCatchableException('TCodeToolManager.AddHandler');
|
||||||
|
if FHandlers[HandlerType]=nil then
|
||||||
|
FHandlers[HandlerType]:=TMethodList.Create;
|
||||||
|
FHandlers[HandlerType].Add(Handler);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCodeToolManager.RemoveHandler(HandlerType: TCodeToolManagerHandler;
|
||||||
|
const Handler: TMethod);
|
||||||
|
begin
|
||||||
|
FHandlers[HandlerType].Remove(Handler);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCodeToolManager.OnToolSetWriteLock(Lock: boolean);
|
procedure TCodeToolManager.OnToolSetWriteLock(Lock: boolean);
|
||||||
begin
|
begin
|
||||||
if Lock then ActivateWriteLock else DeactivateWriteLock;
|
if Lock then ActivateWriteLock else DeactivateWriteLock;
|
||||||
|
@ -30,14 +30,16 @@ unit CodyIdentifiersDlg;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
Classes, SysUtils, FileUtil, LResources, LCLProc, Forms, Controls, Graphics,
|
||||||
ButtonPanel, StdCtrls, CodeToolManager, UnitDictionary;
|
Dialogs, ButtonPanel, StdCtrls, CustomCodeTool, CodeToolManager, UnitDictionary;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
{ TCodyUnitDictionary }
|
{ TCodyUnitDictionary }
|
||||||
|
|
||||||
TCodyUnitDictionary = class(TUnitDictionary)
|
TCodyUnitDictionary = class(TUnitDictionary)
|
||||||
|
private
|
||||||
|
procedure ToolTreeChanged(Tool: TCustomCodeTool; {%H-}NodesDeleting: boolean);
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -83,10 +85,16 @@ end;
|
|||||||
|
|
||||||
{ TCodyUnitDictionary }
|
{ TCodyUnitDictionary }
|
||||||
|
|
||||||
|
procedure TCodyUnitDictionary.ToolTreeChanged(Tool: TCustomCodeTool;
|
||||||
|
NodesDeleting: boolean);
|
||||||
|
begin
|
||||||
|
//debugln(['TCodyUnitDictionary.ToolTreeChanged ',Tool.MainFilename]);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TCodyUnitDictionary.Create;
|
constructor TCodyUnitDictionary.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
|
CodeToolBoss.AddHandlerToolTreeChanging(@ToolTreeChanged);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCodyUnitDictionary.Destroy;
|
destructor TCodyUnitDictionary.Destroy;
|
||||||
|
@ -774,6 +774,7 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
ScanTill:=lsrEnd;
|
ScanTill:=lsrEnd;
|
||||||
CloseUnfinishedNodes;
|
CloseUnfinishedNodes;
|
||||||
|
IncreaseTreeChangeStep(false);
|
||||||
end;
|
end;
|
||||||
except
|
except
|
||||||
{$IFDEF ShowIgnoreErrorAfter}
|
{$IFDEF ShowIgnoreErrorAfter}
|
||||||
|
Loading…
Reference in New Issue
Block a user