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.GetIDEObjectnull95 function 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