File: exttoolside.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (113 lines) | stat: -rw-r--r-- 2,356 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
unit ExtToolsIDE;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,
  // LCL
  Forms,
  // LazUtils
  LazLogger,
  // IDEIntf
  IDEExternToolIntf, IDEMsgIntf, PackageIntf, LazIDEIntf,
  // IDE
  ExtTools;

type
  { TExternalToolIDE }

  TExternalToolIDE = class(TExternalTool)
  private
    procedure SyncAutoFree({%H-}aData: PtrInt); // (main thread)
  protected
    procedure CreateView; override;
    procedure QueueAsyncAutoFree; override;
  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;
  end;

  { TExternalToolsIDE }

  TExternalToolsIDE = class(TExternalTools)
  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;
    function GetIDEObject(ToolData: TIDEExternalToolData): TObject; override;
    procedure HandleMesages; override;
  end;


implementation

{ TExternalToolIDE }

constructor TExternalToolIDE.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
end;

destructor TExternalToolIDE.Destroy;
begin
  inherited Destroy;
end;

procedure TExternalToolIDE.CreateView;
// this tool generates parsed output => auto create view
var
  View: TExtToolView;
begin
  if ViewCount>0 then exit;
  if (ViewCount=0) and (ParserCount>0) and (IDEMessagesWindow<>nil) then
  begin
    View := IDEMessagesWindow.CreateView(Title);
    if View<>nil then
      AddView(View);
  end;
end;

procedure TExternalToolIDE.SyncAutoFree(aData: PtrInt);
begin
  AutoFree;
end;

procedure TExternalToolIDE.QueueAsyncAutoFree;
begin
  Application.QueueAsyncCall(@SyncAutoFree,0);
end;

{ TExternalToolsIDE }

constructor TExternalToolsIDE.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  FToolClass := TExternalToolIDE;
end;

destructor TExternalToolsIDE.Destroy;
begin
  inherited Destroy;
end;

function TExternalToolsIDE.GetIDEObject(ToolData: TIDEExternalToolData): TObject;
begin
  Result:=nil;
  if ToolData=nil then exit;
  if ToolData.Kind=IDEToolCompileProject then begin
    Result:=LazarusIDE.ActiveProject;
  end else if ToolData.Kind=IDEToolCompilePackage then begin
    Result:=PackageEditingInterface.FindPackageWithName(ToolData.ModuleName);
  end else if ToolData.Kind=IDEToolCompileIDE then begin
    Result:=LazarusIDE;
  end;
end;

procedure TExternalToolsIDE.HandleMesages;
begin
  Application.ProcessMessages;
end;

end.