Skip to content

Commit 6a1fb1a

Browse files
committed
[+] implement task adding to a chain, closes #24
[*] set editor style to csDropDownList for Task.Kind column [-] disallow manual editing for Task.Kind column, only drop-down values available
1 parent de9d031 commit 6a1fb1a

4 files changed

Lines changed: 77 additions & 15 deletions

File tree

forms/fmmain.lfm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ object fmMain: TfmMain
105105
ShowHint = True
106106
TabOrder = 0
107107
OnDrawColumnCell = gridTasksDrawColumnCell
108+
OnSelectEditor = gridTasksSelectEditor
108109
end
109110
object splitDetails: TSplitter
110111
Cursor = crVSplit

forms/fmmain.pas

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ TfmMain = class(TForm)
8686
procedure gridChainsTitleClick(Column: TColumn);
8787
procedure gridTasksDrawColumnCell(Sender: TObject; const Rect: TRect;
8888
DataCol: integer; Column: TColumn; State: TGridDrawState);
89+
procedure gridTasksSelectEditor(Sender: TObject; Column: TColumn;
90+
var Editor: TWinControl);
8991
procedure miCloseClick(Sender: TObject);
9092
private
9193
FLastColumn: TColumn; //last sorted grid column
@@ -195,6 +197,17 @@ procedure TfmMain.gridTasksDrawColumnCell(Sender: TObject; const Rect: TRect;
195197
imglGrids.Draw(gridTasks.Canvas, aLeft, aTop, ImgIdx);
196198
end;
197199

200+
procedure TfmMain.gridTasksSelectEditor(Sender: TObject; Column: TColumn;
201+
var Editor: TWinControl);
202+
begin
203+
if Column.FieldName = 'kind' then
204+
with Editor as TCustomComboBox do
205+
begin
206+
Style := csDropDownList;
207+
AutoDropDown := True;
208+
end;
209+
end;
210+
198211
procedure TfmMain.miCloseClick(Sender: TObject);
199212
begin
200213
Close();
@@ -288,8 +301,8 @@ procedure TfmMain.acTaskToolbarUpdate(Sender: TObject);
288301
begin
289302
CanModify := dmPgEngine.IsConnected() and dmPgEngine.qryTasks.CanModify;
290303
acTaskAdd.Enabled := CanModify;
291-
acMoveTaskUp.Enabled := CanModify and not dmPgEngine.qryTasks.BOF;
292-
acMoveTaskDown.Enabled := CanModify and not dmPgEngine.qryTasks.EOF;
304+
acMoveTaskUp.Enabled := CanModify and (dmPgEngine.qryTasks.RecNo > 1);
305+
acMoveTaskDown.Enabled := CanModify and (dmPgEngine.qryTasks.RecNo < dmPgEngine.qryTasks.RecordCount);
293306
acTaskDelete.Enabled := CanModify and
294307
(not (dmPgEngine.qryTasks.BOF and dmPgEngine.qryTasks.EOF));
295308
acTaskEdit.Enabled := CanModify and not (dmPgEngine.qryTasks.State in dsEditModes);

udatamodule.lfm

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ object dmPgEngine: TdmPgEngine
3232
AfterClose = qryChainsAfterClose
3333
AfterDelete = qryChainsAfterDelete
3434
AfterInsert = qryChainsAfterInsert
35-
AfterPost = qryChainsAfterPost
35+
AfterPost = qryAfterPost
3636
BeforeDelete = qryChainsBeforeDelete
3737
Database = PQConn
3838
Transaction = transChains
@@ -114,6 +114,11 @@ object dmPgEngine: TdmPgEngine
114114
IndexName = 'DEFAULT_ORDER'
115115
MaxIndexesCount = 4
116116
FieldDefs = <>
117+
AfterInsert = qryTasksAfterInsert
118+
AfterOpen = qryTasksAfterOpen
119+
AfterPost = qryAfterPost
120+
AfterRefresh = qryTasksAfterOpen
121+
BeforePost = qryTasksBeforePost
117122
Database = PQConn
118123
Transaction = transChains
119124
SQL.Strings = (
@@ -160,11 +165,23 @@ object dmPgEngine: TdmPgEngine
160165
' x'
161166
)
162167
InsertSQL.Strings = (
163-
'INSERT INTO timetable.task'
164-
'(parent_id, task_name, kind, command, run_as, database_connection, ignore_error, autonomous, timeout)'
165-
'VALUES'
166-
'(0, '''',''SQL'', '''', '''', '''', false, false, 0)'
167-
''
168+
'INSERT INTO timetable.task('
169+
' parent_id,'
170+
' command,'
171+
' kind,'
172+
' run_as,'
173+
' ignore_error,'
174+
' autonomous,'
175+
' database_connection'
176+
') VALUES ('
177+
' :"parent_id",'
178+
' :"command",'
179+
' :"kind",'
180+
' :"run_as",'
181+
' :"ignore_error",'
182+
' :"autonomous",'
183+
' :"connect_string"'
184+
')'
168185
)
169186
Options = [sqoKeepOpenOnCommit, sqoAutoApplyUpdates, sqoAutoCommit, sqoRefreshUsingSelect]
170187
Params = <

udatamodule.pas

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ TdmPgEngine = class(TDataModule)
2424
procedure qryChainsAfterClose(DataSet: TDataSet);
2525
procedure qryChainsAfterDelete(DataSet: TDataSet);
2626
procedure qryChainsAfterInsert(DataSet: TDataSet);
27-
procedure qryChainsAfterPost(DataSet: TDataSet);
27+
procedure qryAfterPost(DataSet: TDataSet);
2828
procedure qryChainsBeforeDelete(DataSet: TDataSet);
29+
procedure qryTasksAfterInsert(DataSet: TDataSet);
30+
procedure qryTasksAfterOpen(DataSet: TDataSet);
31+
procedure qryTasksBeforePost(DataSet: TDataSet);
2932
private
33+
FLastTaskID: integer;
3034
public
3135
procedure Connect;
3236
procedure Disconnect;
@@ -80,14 +84,18 @@ procedure TdmPgEngine.qryChainsAfterInsert(DataSet: TDataSet);
8084
end;
8185
end;
8286

83-
procedure TdmPgEngine.qryChainsAfterPost(DataSet: TDataSet);
87+
procedure TdmPgEngine.qryAfterPost(DataSet: TDataSet);
8488
var
85-
c: variant;
89+
FldVal: variant;
90+
FldName: string;
8691
Q: TSQLQuery;
92+
const
93+
FldNames: array[boolean] of string = ('chain_name', 'parent_id');
8794
begin
8895
Q := DataSet as TSQLQuery;
96+
FldName := FldNames[Q = qryTasks];
8997
Q.IndexName := '';
90-
c := DataSet.FieldValues['chain_name'];
98+
FldVal := DataSet.FieldValues[FldName];
9199
try
92100
Q.ApplyUpdates;
93101
DataSet.Refresh;
@@ -98,15 +106,38 @@ procedure TdmPgEngine.qryChainsAfterPost(DataSet: TDataSet);
98106
Q.CancelUpdates;
99107
end;
100108
end;
101-
DataSet.Locate('chain_name', c, []);
102-
fmMain.MainForm.UpdateSortIndication(nil);
109+
DataSet.Locate(FldName, FldVal, []);
110+
if Q = qryChains then
111+
fmMain.MainForm.UpdateSortIndication(nil);
103112
end;
104113

105114
procedure TdmPgEngine.qryChainsBeforeDelete(DataSet: TDataSet);
106115
begin
107116
if MessageDlg('Delete confirmation',
108117
'Are you sure you want delete current chain?', mtWarning, [mbOK, mbCancel], 0) = mrCancel then
109-
Abort;
118+
Abort();
119+
end;
120+
121+
procedure TdmPgEngine.qryTasksAfterInsert(DataSet: TDataSet);
122+
begin
123+
with DataSet do
124+
begin
125+
FieldByName('parent_id').AsInteger := FLastTaskID;
126+
FieldByName('kind').AsString := 'SQL';
127+
FieldByName('ignore_error').AsBoolean := False;
128+
FieldByName('autonomous').AsBoolean := False;
129+
end;
130+
end;
131+
132+
procedure TdmPgEngine.qryTasksAfterOpen(DataSet: TDataSet);
133+
begin
134+
DataSet.Last();
135+
FLastTaskID := DataSet.FieldByName('task_id').AsInteger;
136+
end;
137+
138+
procedure TdmPgEngine.qryTasksBeforePost(DataSet: TDataSet);
139+
begin
140+
if DataSet.FieldByName('command').IsNull then Abort();
110141
end;
111142

112143
procedure TdmPgEngine.Connect;

0 commit comments

Comments
 (0)