Skip to content

Commit c611d88

Browse files
committed
code-completion-add-02
1 parent 14612c2 commit c611d88

10 files changed

+527
-3
lines changed

Package/DelphiAIDeveloper.dpk

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ contains
107107
DelphiAIDev.Projects.Fields in '..\Src\Projects\DelphiAIDev.Projects.Fields.pas',
108108
DelphiAIDev.Projects.Model in '..\Src\Projects\DelphiAIDev.Projects.Model.pas',
109109
DelphiAIDev.Projects.Interfaces in '..\Src\Projects\DelphiAIDev.Projects.Interfaces.pas',
110-
DelphiAIDev.CodeCompletion.Vars in '..\Src\CodeCompletion\DelphiAIDev.CodeCompletion.Vars.pas';
110+
DelphiAIDev.CodeCompletion.Vars in '..\Src\CodeCompletion\DelphiAIDev.CodeCompletion.Vars.pas',
111+
DelphiAIDev.IDE.OTAIDENotifier in '..\Src\IDE\OTAIDENotifier\DelphiAIDev.IDE.OTAIDENotifier.pas',
112+
DelphiAIDev.IDE.OTAEditorNotifier in '..\Src\IDE\OTAEditorNotifier\DelphiAIDev.IDE.OTAEditorNotifier.pas',
113+
DelphiAIDev.IDE.NTAEditViewNotifier in '..\Src\IDE\NTAEditViewNotifier\DelphiAIDev.IDE.NTAEditViewNotifier.pas';
111114

112115
end.

Package/DelphiAIDeveloper.dproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@
223223
<DCCReference Include="..\Src\Projects\DelphiAIDev.Projects.Model.pas"/>
224224
<DCCReference Include="..\Src\Projects\DelphiAIDev.Projects.Interfaces.pas"/>
225225
<DCCReference Include="..\Src\CodeCompletion\DelphiAIDev.CodeCompletion.Vars.pas"/>
226+
<DCCReference Include="..\Src\IDE\OTAIDENotifier\DelphiAIDev.IDE.OTAIDENotifier.pas"/>
227+
<DCCReference Include="..\Src\IDE\OTAEditorNotifier\DelphiAIDev.IDE.OTAEditorNotifier.pas"/>
228+
<DCCReference Include="..\Src\IDE\NTAEditViewNotifier\DelphiAIDev.IDE.NTAEditViewNotifier.pas"/>
226229
<RcItem Include="Img\c4d_Logo.bmp">
227230
<ResourceType>BITMAP</ResourceType>
228231
<ResourceId>c4d_Logo</ResourceId>

Src/DelphiAIDev.Register.pas

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ interface
77
DelphiAIDev.MainMenu.Register,
88
DelphiAIDev.KeyboardBinding,
99
DelphiAIDev.PopupMenuProjects,
10-
DelphiAIDev.DB.Chat.View;
10+
DelphiAIDev.DB.Chat.View,
11+
DelphiAIDev.IDE.OTAIDENotifier;
1112

1213
procedure Register;
1314

@@ -20,6 +21,7 @@ procedure Register;
2021
DelphiAIDev.KeyboardBinding.RefreshRegister;
2122
DelphiAIDev.PopupMenuProjects.RegisterSelf;
2223
DelphiAIDev.DB.Chat.View.RegisterSelf;
24+
DelphiAIDev.IDE.OTAIDENotifier.RegisterSelf;
2325
end;
2426

2527
end.
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
unit DelphiAIDev.IDE.NTAEditViewNotifier;
2+
3+
interface
4+
5+
uses
6+
System.SysUtils,
7+
System.Classes,
8+
System.Generics.Collections,
9+
System.Types,
10+
System.SyncObjs,
11+
System.RegularExpressions,
12+
Vcl.Dialogs,
13+
Vcl.Graphics,
14+
Vcl.Imaging.pngimage,
15+
DelphiAIDev.Utils,
16+
DelphiAIDev.Utils.OTA,
17+
DelphiAIDev.Consts,
18+
DelphiAIDev.CodeCompletion.Vars,
19+
ToolsAPI;
20+
21+
type
22+
TDelphiAIDevIDENTAEditViewNotifier = class(TInterfacedObject, IOTANotifier, INTAEditViewNotifier)
23+
protected
24+
FIOTAEditView: IOTAEditView;
25+
FIndex: Integer;
26+
procedure RemoveNotifier;
27+
public
28+
constructor Create(FileName: string; AEditView: IOTAEditView);
29+
destructor Destroy; override;
30+
31+
{ INTAEditViewNotifier }
32+
///<summary>EditorIdle é chamado após alguma ação ter ocorrido na visualização
33+
///(edição, movimento do cursor, etc.) e um período de tempo ter passado sem que outra
34+
///ação acontecesse. Isso é aproximadamente equivalente ao momento em que o Code
35+
///Insight é acionado (e está vinculado à configuração de atraso do Code Insight)</summary>
36+
procedure EditorIdle(const View: IOTAEditView);
37+
procedure BeginPaint(const View: IOTAEditView; var FullRepaint: Boolean);
38+
procedure PaintLine(const View: IOTAEditView; LineNumber: Integer;
39+
const LineText: PAnsiChar; const TextWidth: Word; const LineAttributes: TOTAAttributeArray;
40+
const Canvas: TCanvas; const TextRect: TRect; const LineRect: TRect; const CellSize: TSize);
41+
///<summary>EndPaint é chamado depois que todas as linhas foram repintadas.
42+
///Use isso para limpar quaisquer estruturas de dados que foram mantidas
43+
///ao longo da pintura das linhas</summary>
44+
procedure EndPaint(const View: IOTAEditView);
45+
46+
//IOTANotifier
47+
procedure AfterSave;
48+
procedure BeforeSave;
49+
procedure Modified;
50+
procedure Destroyed;
51+
end;
52+
53+
implementation
54+
55+
constructor TDelphiAIDevIDENTAEditViewNotifier.Create(FileName: string; AEditView: IOTAEditView);
56+
begin
57+
inherited Create;
58+
FIOTAEditView := AEditView;
59+
FIndex := FIOTAEditView.AddNotifier(Self);
60+
end;
61+
62+
destructor TDelphiAIDevIDENTAEditViewNotifier.Destroy;
63+
begin
64+
RemoveNotifier;
65+
inherited;
66+
end;
67+
68+
procedure TDelphiAIDevIDENTAEditViewNotifier.Destroyed;
69+
begin
70+
RemoveNotifier;
71+
end;
72+
73+
procedure TDelphiAIDevIDENTAEditViewNotifier.AfterSave;
74+
begin
75+
76+
end;
77+
78+
procedure TDelphiAIDevIDENTAEditViewNotifier.BeforeSave;
79+
begin
80+
81+
end;
82+
83+
procedure TDelphiAIDevIDENTAEditViewNotifier.BeginPaint(const View: IOTAEditView; var FullRepaint: Boolean);
84+
begin
85+
FullRepaint := True;
86+
end;
87+
88+
procedure TDelphiAIDevIDENTAEditViewNotifier.EditorIdle(const View: IOTAEditView);
89+
var
90+
LRow: Integer;
91+
LColumn: Integer;
92+
begin
93+
TUtilsOTA.GetCursorPosition(LRow, LColumn);
94+
95+
// TUtils.AddLog(Format('EditorIdle - %d (%d) - %d (%d) - %s ',
96+
// [TDelphiAIDevCodeCompletionVars.GetInstance.Row, LRow, TDelphiAIDevCodeCompletionVars.GetInstance.Column, LColumn, DateTimeToStr(Now)]));
97+
98+
if (LRow <> TDelphiAIDevCodeCompletionVars.GetInstance.Row) or (LColumn <> TDelphiAIDevCodeCompletionVars.GetInstance.Column) then
99+
begin
100+
TDelphiAIDevCodeCompletionVars.GetInstance.LineIni := 0;
101+
TDelphiAIDevCodeCompletionVars.GetInstance.Clear;
102+
end;
103+
104+
//TUtils.AddLog('EditorIdle ' + BoolToStr(TDelphiAIDevCodeCompletionVars.GetInstance.ClearNext, True));
105+
106+
// if TDelphiAIDevCodeCompletionVars.GetInstance.ClearNext then
107+
// begin
108+
// TDelphiAIDevCodeCompletionVars.GetInstance.Clear;
109+
// end
110+
// else
111+
// TDelphiAIDevCodeCompletionVars.GetInstance.ClearNext := True;
112+
113+
//View.AddNotifier()
114+
//View.GetEditWindow.Form.Repaint;
115+
end;
116+
117+
procedure TDelphiAIDevIDENTAEditViewNotifier.EndPaint(const View: IOTAEditView);
118+
begin
119+
//TUtils.AddLog('EndPaint');
120+
end;
121+
122+
procedure TDelphiAIDevIDENTAEditViewNotifier.Modified;
123+
begin
124+
125+
end;
126+
127+
128+
procedure TDelphiAIDevIDENTAEditViewNotifier.PaintLine(const View: IOTAEditView; LineNumber: Integer;
129+
const LineText: PAnsiChar; const TextWidth: Word; const LineAttributes: TOTAAttributeArray;
130+
const Canvas: TCanvas; const TextRect: TRect; const LineRect: TRect; const CellSize: TSize);
131+
var
132+
LLineText: string;
133+
begin
134+
if LineNumber < 1 then
135+
Exit;
136+
137+
LLineText := string(LineText);
138+
139+
if not LLineText.Trim.IsEmpty then
140+
Exit;
141+
142+
//if LineNumber <> View.CursorPos.Line then
143+
// Exit;
144+
145+
if (LineNumber >= TDelphiAIDevCodeCompletionVars.GetInstance.LineIni)and(LineNumber <= TDelphiAIDevCodeCompletionVars.GetInstance.LineEnd) then
146+
begin
147+
Canvas.Brush.Style := bsClear;
148+
Canvas.Font.Color := $777777; //$666666;
149+
150+
try
151+
LLineText := TDelphiAIDevCodeCompletionVars.GetInstance.Contents[LineNumber - TDelphiAIDevCodeCompletionVars.GetInstance.LineIni];
152+
Canvas.TextOut(TextRect.Left, TextRect.Top, LLineText.TrimRight);
153+
except on E: Exception do
154+
TUtils.AddLog(E.Message);
155+
end;
156+
end;
157+
end;
158+
159+
procedure TDelphiAIDevIDENTAEditViewNotifier.RemoveNotifier;
160+
begin
161+
if Assigned(FIOTAEditView) and (FIndex >= 0) then
162+
begin
163+
FIOTAEditView.RemoveNotifier(FIndex);
164+
FIndex := -1;
165+
FIOTAEditView := nil;
166+
end;
167+
end;
168+
169+
end.
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
unit DelphiAIDev.IDE.OTAEditorNotifier;
2+
3+
interface
4+
5+
uses
6+
System.SysUtils,
7+
System.Classes,
8+
System.Generics.Collections,
9+
System.Types,
10+
System.SyncObjs,
11+
System.RegularExpressions,
12+
Vcl.Dialogs,
13+
Vcl.Graphics,
14+
Vcl.Imaging.pngimage,
15+
ToolsAPI,
16+
DelphiAIDev.Utils,
17+
DelphiAIDev.Consts,
18+
DelphiAIDev.CodeCompletion.Vars,
19+
DelphiAIDev.IDE.NTAEditViewNotifier;
20+
21+
type
22+
TDelphiAIDevIDEOTAEditorNotifier = class(TNotifierObject, IOTANotifier, IOTAEditorNotifier)
23+
private
24+
FIOTASourceEditor: IOTASourceEditor;
25+
FINTAEditViewNotifierList: TList<INTAEditViewNotifier>;
26+
FIndex: Integer;
27+
procedure RemoveNotifiers;
28+
public
29+
constructor Create(ASourceEditor: IOTASourceEditor);
30+
destructor Destroy; override;
31+
{ IOTANotifier }
32+
procedure Destroyed;
33+
{ IOTAEditorNotifier }
34+
procedure ViewNotification(const View: IOTAEditView; Operation: TOperation);
35+
procedure ViewActivated(const View: IOTAEditView);
36+
end;
37+
38+
39+
implementation
40+
41+
constructor TDelphiAIDevIDEOTAEditorNotifier.Create(ASourceEditor: IOTASourceEditor);
42+
var
43+
i: Integer;
44+
begin
45+
inherited Create;
46+
FINTAEditViewNotifierList := TList<INTAEditViewNotifier>.Create;
47+
FIOTASourceEditor := ASourceEditor;
48+
49+
FIndex := FIOTASourceEditor.AddNotifier(Self);
50+
for i := 0 to Pred(FIOTASourceEditor.EditViewCount) do
51+
FINTAEditViewNotifierList.Add(TDelphiAIDevIDENTAEditViewNotifier.Create(FIOTASourceEditor.FileName, FIOTASourceEditor.EditViews[i]));
52+
end;
53+
54+
destructor TDelphiAIDevIDEOTAEditorNotifier.Destroy;
55+
begin
56+
RemoveNotifiers;
57+
FINTAEditViewNotifierList.Free;
58+
inherited;
59+
end;
60+
61+
procedure TDelphiAIDevIDEOTAEditorNotifier.Destroyed;
62+
begin
63+
RemoveNotifiers;
64+
end;
65+
66+
procedure TDelphiAIDevIDEOTAEditorNotifier.RemoveNotifiers;
67+
var
68+
i: Integer;
69+
begin
70+
for i := 0 to Pred(FINTAEditViewNotifierList.Count) do
71+
FINTAEditViewNotifierList[i].Destroyed;
72+
FINTAEditViewNotifierList.Clear;
73+
74+
if Assigned(FIOTASourceEditor) and (FIndex >= 0) then
75+
begin
76+
FIOTASourceEditor.RemoveNotifier(FIndex);
77+
FIndex := -1;
78+
FIOTASourceEditor := nil;
79+
end;
80+
end;
81+
82+
procedure TDelphiAIDevIDEOTAEditorNotifier.ViewActivated(const View: IOTAEditView);
83+
begin
84+
85+
end;
86+
87+
procedure TDelphiAIDevIDEOTAEditorNotifier.ViewNotification(const View: IOTAEditView; Operation: TOperation);
88+
begin
89+
if Operation = opInsert then
90+
FINTAEditViewNotifierList.Add(TDelphiAIDevIDENTAEditViewNotifier.Create(FIOTASourceEditor.FileName, View));
91+
end;
92+
93+
end.

0 commit comments

Comments
 (0)