Skip to content

Commit ab1dc2c

Browse files
committed
bk/2024-06-25-2137
1 parent 7c73359 commit ab1dc2c

9 files changed

+138
-41
lines changed

Package/DelphiAIDeveloper.dproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,10 @@
196196
<ResourceType>BITMAP</ResourceType>
197197
<ResourceId>c4d_message</ResourceId>
198198
</RcItem>
199+
<RcItem Include="Img\c4d_question.bmp">
200+
<ResourceType>BITMAP</ResourceType>
201+
<ResourceId>c4d_question</ResourceId>
202+
</RcItem>
199203
<BuildConfiguration Include="Release">
200204
<Key>Cfg_2</Key>
201205
<CfgParent>Base</CfgParent>

Package/Img/c4d_question.bmp

1.3 KB
Binary file not shown.

Src/DefaultsQuestions/DelphiAIDev.DefaultsQuestions.Dao.pas

Lines changed: 114 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,20 @@ interface
66
System.SysUtils,
77
System.Classes,
88
System.JSON,
9+
Rest.JSON,
910
DelphiAIDev.Utils,
1011
DelphiAIDev.DefaultsQuestions.Interfaces,
1112
DelphiAIDev.DefaultsQuestions.Model;
1213

1314
type
1415
TDelphiAIDevDefaultsQuestionsDao = class(TInterfacedObject, IDelphiAIDevDefaultsQuestionsDao)
1516
private
17+
procedure SaveData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
18+
procedure EditData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
1619
protected
1720
procedure ReadData(AProc: TProc<TDelphiAIDevDefaultsQuestionsModel>);
18-
function SaveOrEditData(AModel: TDelphiAIDevDefaultsQuestionsModel): IDelphiAIDevDefaultsQuestionsDao;
21+
procedure SaveOrEditData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
22+
procedure RemoveData(const AGuid: string);
1923
public
2024
class function New: IDelphiAIDevDefaultsQuestionsDao;
2125
constructor Create;
@@ -64,7 +68,6 @@ procedure TDelphiAIDevDefaultsQuestionsDao.ReadData(AProc: TProc<TDelphiAIDevDef
6468
Continue;
6569

6670
LJSONObjItem := LJSONArray.Items[i] as TJSONObject;
67-
6871
LModel.Guid := LJSONObjItem.GetValue<string>('guid');
6972
LModel.GuidMenuMaster := LJSONObjItem.GetValue<string>('guid_menu_master');
7073
LModel.Question := LJSONObjItem.GetValue<string>('question');
@@ -81,14 +84,20 @@ procedure TDelphiAIDevDefaultsQuestionsDao.ReadData(AProc: TProc<TDelphiAIDevDef
8184
end;
8285
end;
8386

84-
function TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData(AModel: TDelphiAIDevDefaultsQuestionsModel): IDelphiAIDevDefaultsQuestionsDao;
87+
procedure TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
88+
begin
89+
if AModel.Guid.Trim.IsEmpty then
90+
Self.SaveData(AModel)
91+
else
92+
Self.EditData(AModel);
93+
end;
94+
95+
procedure TDelphiAIDevDefaultsQuestionsDao.SaveData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
8596
var
8697
LStringList: TStringList;
8798
LJSONArray: TJSONArray;
8899
LJSONObject: TJSONObject;
89100
begin
90-
Result := Self;
91-
92101
LStringList := TStringList.Create;
93102
try
94103
if FileExists(TUtils.GetPathFileJSONDefaultsQuestions) then
@@ -97,23 +106,18 @@ function TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData(AModel: TDelphiAIDevDef
97106
LJSONArray := TJSONArray.Create;
98107
try
99108
if string(LStringList.Text).Trim.StartsWith('[') then
100-
begin
101109
LJSONArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(LStringList.Text), 0) as TJSONArray;
102-
end;
103-
104-
if AModel.Guid.Trim.IsEmpty then
105-
AModel.Guid := TUtils.GetGuidStr;
106110

107111
LJSONObject := TJSONObject.Create;
108-
LJSONObject.AddPair('guid', AModel.Guid);
112+
LJSONObject.AddPair('guid', TUtils.GetGuidStr);
109113
LJSONObject.AddPair('guid_menu_master', AModel.GuidMenuMaster);
110114
LJSONObject.AddPair('question', AModel.Question);
111115
LJSONObject.AddPair('order', TJSONNumber.Create(AModel.Order));
112116
LJSONObject.AddPair('visible', TJSONBool.Create(AModel.Visible));
113117
LJSONObject.AddPair('code_only', TJSONBool.Create(AModel.CodeOnly));
114118
LJSONArray.AddElement(LJSONObject);
115119

116-
LStringList.Text := LJSONArray.Format(2)
120+
LStringList.Text := LJSONArray.Format(2);
117121
finally
118122
LJSONArray.Free;
119123
end;
@@ -122,32 +126,106 @@ function TDelphiAIDevDefaultsQuestionsDao.SaveOrEditData(AModel: TDelphiAIDevDef
122126
finally
123127
LStringList.Free;
124128
end;
129+
end;
125130

131+
procedure TDelphiAIDevDefaultsQuestionsDao.EditData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
132+
var
133+
LStringList: TStringList;
134+
LJSONArray: TJSONArray;
135+
LJSONObjItem: TJSONObject;
136+
i: Integer;
137+
begin
138+
LStringList := TStringList.Create;
139+
try
140+
if FileExists(TUtils.GetPathFileJSONDefaultsQuestions) then
141+
LStringList.LoadFromFile(TUtils.GetPathFileJSONDefaultsQuestions);
126142

127-
// FQuery.CloseClear.ExecSQL('CREATE TABLE IF NOT EXISTS defaults_questions(id INTEGER PRIMARY KEY, '+
128-
// 'id_parent Integer, question TEXT, order_display Integer, name TEXT)');
129-
//
130-
// FQuery.CloseClear
131-
// .Add('CREATE TABLE IF NOT EXISTS defaults_questions(')
132-
// .Add(' id INTEGER PRIMARY KEY,')
133-
// .Add(' id_parent INTEGER,')
134-
// .Add(' question TEXT,')
135-
// .Add(' order_display INTEGER,')
136-
// .Add(' visible TEXT,')
137-
// .Add(' code_only TEXT')
138-
// .Add(') ')
139-
// .ExecSQL;
140-
//
141-
// FQuery.CloseClear
142-
// .Add('insert into defaults_questions(id_parent, question, order_display, visible, code_only)')
143-
// .Add('values(:id_parent, :question, :order_display, :visible, :code_only)')
144-
// .AddParam('id_parent', AModel.IdParent)
145-
// .AddParam('question', AModel.Question)
146-
// .AddParam('order_display', AModel.Order)
147-
// .AddParam('visible', TUtils.BoolToStrC4D(AModel.Visible))
148-
// .AddParam('code_only', TUtils.BoolToStrC4D(AModel.CodeOnly))
149-
// .ExecSQL;
143+
LJSONArray := TJSONArray.Create;
144+
try
145+
if string(LStringList.Text).Trim.StartsWith('[') then
146+
LJSONArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(LStringList.Text), 0) as TJSONArray;
147+
148+
for i := 0 to Pred(LJSONArray.Count) do
149+
begin
150+
if not(LJSONArray.Items[i] is TJSONObject) then
151+
Continue;
152+
153+
LJSONObjItem := LJSONArray.Items[i] as TJSONObject;
154+
155+
if LJSONObjItem.GetValue<string>('guid') = AModel.Guid then
156+
begin
157+
LJSONObjItem.RemovePair('guid_menu_master').Free;
158+
LJSONObjItem.AddPair('guid_menu_master', AModel.GuidMenuMaster);
159+
160+
LJSONObjItem.RemovePair('question').Free;
161+
LJSONObjItem.AddPair('question', AModel.Question);
162+
163+
LJSONObjItem.RemovePair('order').Free;
164+
LJSONObjItem.AddPair('order', TJSONNumber.Create(AModel.Order));
165+
166+
LJSONObjItem.RemovePair('visible').Free;
167+
LJSONObjItem.AddPair('visible', TJSONBool.Create(AModel.Visible));
168+
169+
LJSONObjItem.RemovePair('code_only').Free;
170+
LJSONObjItem.AddPair('code_only', TJSONBool.Create(AModel.CodeOnly));
171+
Break;
172+
end;
173+
end;
174+
175+
LStringList.Text := LJSONArray.Format(2);
176+
finally
177+
LJSONArray.Free;
178+
end;
179+
180+
LStringList.SaveToFile(TUtils.GetPathFileJSONDefaultsQuestions);
181+
finally
182+
LStringList.Free;
183+
end;
150184
end;
151185

152-
end.
186+
procedure TDelphiAIDevDefaultsQuestionsDao.RemoveData(const AGuid: string);
187+
var
188+
LStringList: TStringList;
189+
LJSONArray: TJSONArray;
190+
LJSONObjItem: TJSONObject;
191+
i: Integer;
192+
begin
193+
if AGuid.Trim.IsEmpty then
194+
Exit;
195+
196+
if not FileExists(TUtils.GetPathFileJSONDefaultsQuestions) then
197+
Exit;
198+
199+
LStringList := TStringList.Create;
200+
try
201+
LStringList.LoadFromFile(TUtils.GetPathFileJSONDefaultsQuestions);
202+
if not string(LStringList.Text).Trim.StartsWith('[') then
203+
Exit;
204+
205+
LJSONArray := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(LStringList.Text), 0) as TJSONArray;
206+
try
207+
for i := 0 to Pred(LJSONArray.Count) do
208+
begin
209+
if not(LJSONArray.Items[i] is TJSONObject) then
210+
Continue;
211+
212+
LJSONObjItem := LJSONArray.Items[i] as TJSONObject;
213+
if LJSONObjItem.GetValue<string>('guid') = AGuid then
214+
begin
215+
LJSONArray.Remove(i);
216+
Break;
217+
end;
218+
end;
219+
220+
LStringList.Text := LJSONArray.Format(2);
221+
finally
222+
LJSONArray.Free;
223+
end;
153224

225+
LStringList.SaveToFile(TUtils.GetPathFileJSONDefaultsQuestions);
226+
finally
227+
LStringList.Free;
228+
end;
229+
end;
230+
231+
end.

Src/DefaultsQuestions/DelphiAIDev.DefaultsQuestions.Interfaces.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ interface
1010
IDelphiAIDevDefaultsQuestionsDao = interface
1111
['{3399A776-4B23-4CFC-8992-568AE07FE065}']
1212
procedure ReadData(AProc: TProc<TDelphiAIDevDefaultsQuestionsModel>);
13-
function SaveOrEditData(AModel: TDelphiAIDevDefaultsQuestionsModel): IDelphiAIDevDefaultsQuestionsDao;
13+
procedure SaveOrEditData(const AModel: TDelphiAIDevDefaultsQuestionsModel);
14+
procedure RemoveData(const AGuid: string);
1415
end;
1516

1617
implementation

Src/DefaultsQuestions/DelphiAIDev.DefaultsQuestions.Model.pas

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ TDelphiAIDevDefaultsQuestionsModel = class
1414
public
1515
constructor Create;
1616
procedure Clear;
17-
1817
property Guid: string read FGuid write FGuid;
1918
property GuidMenuMaster: string read FGuidMenuMaster write FGuidMenuMaster;
2019
property Question: string read FQuestion write FQuestion;

Src/DefaultsQuestions/DelphiAIDev.DefaultsQuestions.View.dfm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ object DelphiAIDevDefaultsQuestionsView: TDelphiAIDevDefaultsQuestionsView
9797
Caption = 'Remove'
9898
TabOrder = 3
9999
OnClick = btnRemoveClick
100+
ExplicitTop = 1
100101
end
101102
end
102103
object ListViewHistory: TListView

Src/DefaultsQuestions/DelphiAIDev.DefaultsQuestions.View.pas

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ TDelphiAIDevDefaultsQuestionsView = class(TForm)
4747
FUtilsListView: IDelphiAIDevUtilsListView;
4848
FReloadPopupMenuChat: Boolean;
4949
procedure ReloadData;
50+
procedure ReloadDataInternal;
5051
procedure FillStatusBar(AItem: TListItem);
5152
procedure FillModelWithSelectedItem(var AModel: TDelphiAIDevDefaultsQuestionsModel);
5253
public
@@ -164,6 +165,16 @@ procedure TDelphiAIDevDefaultsQuestionsView.edtSearchKeyDown(Sender: TObject; va
164165
end;
165166

166167
procedure TDelphiAIDevDefaultsQuestionsView.ReloadData;
168+
begin
169+
Screen.Cursor := crHourGlass;
170+
try
171+
Self.ReloadDataInternal;
172+
finally
173+
Screen.Cursor := crDefault;
174+
end;
175+
end;
176+
177+
procedure TDelphiAIDevDefaultsQuestionsView.ReloadDataInternal;
167178
var
168179
LStrSearch: string;
169180
LListItem: TListItem;
@@ -351,7 +362,7 @@ procedure TDelphiAIDevDefaultsQuestionsView.btnRemoveClick(Sender: TObject);
351362

352363
Screen.Cursor := crHourGlass;
353364
try
354-
//TC4DWizardOpenExternalModel.New.RemoveGuidInIniFile(LGuid);
365+
TDelphiAIDevDefaultsQuestionsDao.New.RemoveData(LGuid);
355366
Self.ReloadData;
356367
finally
357368
FReloadPopupMenuChat := True;

Src/IDE/ImageListMain/DelphiAIDev.IDE.ImageListMain.pas

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ TDelphiAIDevIDEImageListMain = class
1212
FImgIndexC4D_Logo: Integer;
1313
FImgIndexGear: Integer;
1414
FImgIndexMessage: Integer;
15+
FImgQuestion: Integer;
1516
constructor Create;
1617
public
18+
class function GetInstance: TDelphiAIDevIDEImageListMain;
1719
property ImgIndexC4D_Logo: Integer read FImgIndexC4D_Logo;
1820
property ImgIndexGear: Integer read FImgIndexGear;
1921
property ImgIndexMessage: Integer read FImgIndexMessage;
20-
class function GetInstance: TDelphiAIDevIDEImageListMain;
22+
property ImgQuestion: Integer read FImgQuestion;
2123
end;
2224

2325
implementation
@@ -40,6 +42,7 @@ constructor TDelphiAIDevIDEImageListMain.Create;
4042
FImgIndexC4D_Logo := TUtilsOTA.AddImgIDEResourceName('c4d_logo');
4143
FImgIndexGear := TUtilsOTA.AddImgIDEResourceName('c4d_gear');
4244
FImgIndexMessage := TUtilsOTA.AddImgIDEResourceName('c4d_message');
45+
FImgQuestion := TUtilsOTA.AddImgIDEResourceName('c4d_question');
4346
end;
4447

4548
initialization

Src/MainMenu/DelphiAIDev.MainMenu.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ procedure TDelphiAIDevIDEMainMenu.CreateMenus;
7272
Self.CreateSubMenu(TConsts.MENU_IDE_DEFAULTS_QUESTIONS_NAME,
7373
TConsts.MENU_IDE_DEFAULTS_QUESTIONS_CAPTION,
7474
TDelphiAIDevIDEMainMenuClicks.DefaultsQuestionsClick,
75-
-1
75+
TDelphiAIDevIDEImageListMain.GetInstance.ImgQuestion
7676
);
7777

7878
Self.CreateSubMenu('C4DSeparator50', '-', nil);

0 commit comments

Comments
 (0)