1 unit ExtToolsIDE; 2 3 {$mode objfpc}{$H+} 4 5 interface 6 7 uses 8 Classes, SysUtils, 9 // LCL 10 Forms, 11 // LazUtils 12 LazLogger, 13 // IDEIntf 14 IDEExternToolIntf, IDEMsgIntf, PackageIntf, LazIDEIntf, 15 // IDE 16 ExtTools; 17 18 type 19 { TExternalToolIDE } 20 21 TExternalToolIDE = class(TExternalTool) 22 private 23 procedure SyncAutoFree({%H-}aData: PtrInt); // (main thread) 24 protected 25 procedure CreateView; override; 26 procedure QueueAsyncAutoFree; override; 27 public 28 constructor Create(aOwner: TComponent); override; 29 destructor Destroy; override; 30 end; 31 32 { TExternalToolsIDE } 33 34 TExternalToolsIDE = class(TExternalTools) 35 public 36 constructor Create(aOwner: TComponent); override; 37 destructor Destroy; override; GetIDEObjectnull38 function GetIDEObject(ToolData: TIDEExternalToolData): TObject; override; 39 procedure HandleMessages; override; 40 end; 41 42 43 implementation 44 45 { TExternalToolIDE } 46 47 constructor TExternalToolIDE.Create(aOwner: TComponent); 48 begin 49 inherited Create(aOwner); 50 end; 51 52 destructor TExternalToolIDE.Destroy; 53 begin 54 Application.RemoveAllHandlersOfObject(Self); 55 inherited Destroy; 56 end; 57 58 procedure TExternalToolIDE.CreateView; 59 // this tool generates parsed output => auto create view 60 var 61 View: TExtToolView; 62 begin 63 if ViewCount>0 then exit; 64 if (ViewCount=0) and (ParserCount>0) and (IDEMessagesWindow<>nil) then 65 begin 66 View := IDEMessagesWindow.CreateView(Title); 67 if View<>nil then 68 AddView(View); 69 end; 70 end; 71 72 procedure TExternalToolIDE.SyncAutoFree(aData: PtrInt); 73 begin 74 AutoFree; 75 end; 76 77 procedure TExternalToolIDE.QueueAsyncAutoFree; 78 begin 79 Application.QueueAsyncCall(@SyncAutoFree,0); 80 end; 81 82 { TExternalToolsIDE } 83 84 constructor TExternalToolsIDE.Create(aOwner: TComponent); 85 begin 86 inherited Create(aOwner); 87 FToolClass := TExternalToolIDE; 88 end; 89 90 destructor TExternalToolsIDE.Destroy; 91 begin 92 inherited Destroy; 93 end; 94 TExternalToolsIDE.GetIDEObjectnull95function TExternalToolsIDE.GetIDEObject(ToolData: TIDEExternalToolData): TObject; 96 begin 97 Result:=nil; 98 if ToolData=nil then exit; 99 if ToolData.Kind=IDEToolCompileProject then begin 100 Result:=LazarusIDE.ActiveProject; 101 end else if ToolData.Kind=IDEToolCompilePackage then begin 102 Result:=PackageEditingInterface.FindPackageWithName(ToolData.ModuleName); 103 end else if ToolData.Kind=IDEToolCompileIDE then begin 104 Result:=LazarusIDE; 105 end; 106 end; 107 108 procedure TExternalToolsIDE.HandleMessages; 109 begin 110 Application.ProcessMessages; 111 end; 112 113 end. 114 115