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