Skip to content

Commit c781561

Browse files
authored
Merge pull request #53 from cybertec-postgresql/30-pop-up-editor-for-cron-values
[+] implement pop-up editor for chain Cron values, closes #30
2 parents 125b2e6 + 7cd4c7f commit c781561

12 files changed

+474
-150
lines changed

forms/fmmain.lfm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ object fmMain: TfmMain
2020
Images = imglTabs
2121
TabIndex = 0
2222
TabOrder = 0
23+
OnChange = pcEditorsChange
2324
object tsOverview: TTabSheet
2425
Caption = 'Overview'
2526
ClientHeight = 986
@@ -82,6 +83,7 @@ object fmMain: TfmMain
8283
FieldName = 'live'
8384
end
8485
item
86+
ButtonStyle = cbsEllipsis
8587
PickList.Strings = (
8688
'* * * * *'
8789
'@every <interval>'
@@ -137,6 +139,7 @@ object fmMain: TfmMain
137139
TabAdvance = aaRight
138140
TabOrder = 0
139141
TitleImageList = imglGrids
142+
OnEditButtonClick = gridChainsEditButtonClick
140143
OnEditingDone = gridChainsEditingDone
141144
OnTitleClick = gridChainsTitleClick
142145
end

forms/fmmain.pas

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ interface
77
uses
88
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, Menus,
99
StdCtrls, DBGrids, DBCtrls, ExtCtrls, uObjects, DB, Grids, ActnList, Buttons,
10-
frameTaskCommand;
10+
frameTaskCommandEditor, frameCronEditor;
1111

1212
type
1313

@@ -93,6 +93,7 @@ TfmMain = class(TForm)
9393
procedure acTaskToolbarUpdate(Sender: TObject);
9494
procedure acConnectClick(Sender: TObject);
9595
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
96+
procedure gridChainsEditButtonClick(Sender: TObject);
9697
procedure gridChainsEditingDone(Sender: TObject);
9798
procedure gridChainsTitleClick(Column: TColumn);
9899
procedure gridTasksDrawColumnCell(Sender: TObject; const Rect: TRect;
@@ -102,9 +103,11 @@ TfmMain = class(TForm)
102103
var Editor: TWinControl);
103104
procedure miCloseClick(Sender: TObject);
104105
procedure miLogClick(Sender: TObject);
106+
procedure pcEditorsChange(Sender: TObject);
105107
private
106108
FLastColumn: TColumn; //last sorted grid column
107-
FTaskCmd: TfrmTaskCommand;
109+
FTaskCmd: TfrmTaskCommandEditor;
110+
FCronEdit: TfrmCronEditor;
108111
public
109112
procedure UpdateSortIndication(ACol: TColumn);
110113
end;
@@ -114,7 +117,7 @@ TfmMain = class(TForm)
114117

115118
implementation
116119

117-
uses uDataModule, SQLDB, LCLType, RegExpr;
120+
uses uDataModule, SQLDB, LCLType;
118121

119122
{$R *.lfm}
120123

@@ -126,6 +129,19 @@ procedure TfmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
126129
CanClose := True;
127130
end;
128131

132+
procedure TfmMain.gridChainsEditButtonClick(Sender: TObject);
133+
var
134+
P: TPoint;
135+
begin
136+
if not Assigned(FCronEdit) then
137+
begin
138+
FCronEdit := TfrmCronEditor.Create(Self);
139+
FCronEdit.Parent := Self;
140+
end;
141+
P := gridChains.ClientToParent(gridChains.SelectedFieldRect.TopLeft, Self);
142+
FCronEdit.ShowEditor(gridChains.SelectedField, P);
143+
end;
144+
129145
procedure TfmMain.gridChainsEditingDone(Sender: TObject);
130146
var
131147
S: string;
@@ -212,13 +228,16 @@ procedure TfmMain.gridTasksDrawColumnCell(Sender: TObject; const Rect: TRect;
212228
end;
213229

214230
procedure TfmMain.gridTasksEditButtonClick(Sender: TObject);
231+
var
232+
P: TPoint;
215233
begin
216234
if not Assigned(FTaskCmd) then
217235
begin
218-
FTaskCmd := TfrmTaskCommand.Create(Self);
219-
FTaskCmd.Parent := gridTasks;
236+
FTaskCmd := TfrmTaskCommandEditor.Create(Self);
237+
FTaskCmd.Parent := Self;
220238
end;
221-
FTaskCmd.ShowEditor(gridTasks.SelectedField, gridTasks.SelectedFieldRect.TopLeft);
239+
P := gridTasks.ClientToParent(gridTasks.SelectedFieldRect.TopLeft, Self);
240+
FTaskCmd.ShowEditor(gridTasks.SelectedField, P);
222241
end;
223242

224243
procedure TfmMain.gridTasksSelectEditor(Sender: TObject; Column: TColumn;
@@ -245,6 +264,11 @@ procedure TfmMain.miLogClick(Sender: TObject);
245264
if tsLog.TabVisible then tsLog.Show();
246265
end;
247266

267+
procedure TfmMain.pcEditorsChange(Sender: TObject);
268+
begin
269+
pcEditors.SetFocus();
270+
end;
271+
248272
procedure TfmMain.UpdateSortIndication(ACol: TColumn);
249273
begin
250274
// Remove the sort arrow from the previous column we sorted

forms/framebase.lfm

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
object BaseFrame: TBaseFrame
2+
Left = 0
3+
Height = 360
4+
Top = 0
5+
Width = 480
6+
ClientHeight = 360
7+
ClientWidth = 480
8+
DesignTimePPI = 144
9+
LCLVersion = '2.2.4.0'
10+
OnExit = FrameExit
11+
ParentFont = False
12+
TabOrder = 0
13+
DesignLeft = 2785
14+
DesignTop = 1022
15+
object pnlButtons: TPanel
16+
Left = 0
17+
Height = 56
18+
Top = 304
19+
Width = 480
20+
Align = alBottom
21+
ClientHeight = 56
22+
ClientWidth = 480
23+
TabOrder = 0
24+
object btnOK: TButton
25+
Left = 344
26+
Height = 38
27+
Top = 8
28+
Width = 113
29+
Caption = 'OK'
30+
OnClick = btnOKClick
31+
TabOrder = 0
32+
end
33+
object btnCancel: TButton
34+
Left = 16
35+
Height = 38
36+
Top = 8
37+
Width = 113
38+
Caption = 'Cancel'
39+
OnExit = FrameExit
40+
TabOrder = 1
41+
end
42+
end
43+
end

forms/framebase.pas

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
unit framebase;
2+
3+
{$mode ObjFPC}{$H+}
4+
5+
interface
6+
7+
uses
8+
Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, SynEdit,
9+
SynHighlighterSQL, ComCtrls, LCLType, Db;
10+
11+
type
12+
13+
{ TBaseFrame }
14+
15+
TBaseFrame = class(TFrame)
16+
btnOK: TButton;
17+
btnCancel: TButton;
18+
pnlButtons: TPanel;
19+
procedure btnOKClick(Sender: TObject);
20+
procedure FrameExit(Sender: TObject);
21+
protected
22+
fldCommand: TField;
23+
function GetEditorValue(): string; virtual; abstract;
24+
procedure SetEditorValue(AText: string); virtual; abstract;
25+
public
26+
procedure ShowEditor(AField: TField; ATopLeft: TPoint);
27+
procedure HideEditor();
28+
procedure ApplyChanges();
29+
end;
30+
31+
implementation
32+
33+
{$R *.lfm}
34+
35+
{ TBaseFrame }
36+
37+
procedure TBaseFrame.FrameExit(Sender: TObject);
38+
begin
39+
HideEditor();
40+
end;
41+
42+
procedure TBaseFrame.btnOKClick(Sender: TObject);
43+
begin
44+
ApplyChanges();
45+
end;
46+
47+
procedure TBaseFrame.ShowEditor(AField: TField; ATopLeft: TPoint);
48+
begin
49+
SetEditorValue(AField.AsString);
50+
fldCommand := AField;
51+
Left := ATopLeft.X;
52+
Top := ATopLeft.Y;
53+
Show();
54+
SetFocus();
55+
end;
56+
57+
procedure TBaseFrame.HideEditor;
58+
begin
59+
Hide();
60+
Parent.SetFocus();
61+
end;
62+
63+
procedure TBaseFrame.ApplyChanges;
64+
begin
65+
fldCommand.DataSet.Edit;
66+
fldCommand.AsString := GetEditorValue();
67+
HideEditor();
68+
end;
69+
70+
end.
71+

forms/framecroneditor.lfm

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
inherited frmCronEditor: TfrmCronEditor
2+
Width = 472
3+
ClientWidth = 472
4+
inherited pnlButtons: TPanel
5+
Width = 472
6+
ClientWidth = 472
7+
inherited btnCancel: TButton
8+
OnClick = FrameExit
9+
OnExit = nil
10+
end
11+
end
12+
object pnlEditor: TPanel[1]
13+
Left = 0
14+
Height = 304
15+
Top = 0
16+
Width = 472
17+
Align = alClient
18+
ClientHeight = 304
19+
ClientWidth = 472
20+
TabOrder = 1
21+
object edCron: TEdit
22+
Left = 48
23+
Height = 35
24+
Top = 41
25+
Width = 375
26+
Alignment = taCenter
27+
Font.Height = -24
28+
Font.Name = 'Courier New'
29+
Font.Pitch = fpFixed
30+
OnChange = edCronChange
31+
ParentFont = False
32+
TabOrder = 0
33+
Text = '* * * * *'
34+
end
35+
object mmRuns: TMemo
36+
Left = 48
37+
Height = 180
38+
Top = 112
39+
Width = 375
40+
Color = clInfoBk
41+
Lines.Strings = (
42+
'mmRuns'
43+
)
44+
TabOrder = 1
45+
end
46+
object lblNextRuns: TLabel
47+
Left = 26
48+
Height = 25
49+
Top = 80
50+
Width = 79
51+
Caption = 'Next runs:'
52+
ParentColor = False
53+
end
54+
object lblDayMonth: TLabel
55+
Left = 198
56+
Height = 25
57+
Top = 16
58+
Width = 75
59+
Alignment = taCenter
60+
AutoSize = False
61+
Caption = 'Day'
62+
ParentColor = False
63+
end
64+
object lblMonth: TLabel
65+
Left = 273
66+
Height = 25
67+
Top = 16
68+
Width = 75
69+
Alignment = taCenter
70+
AutoSize = False
71+
Caption = 'Month'
72+
ParentColor = False
73+
end
74+
object lblWeekday: TLabel
75+
Left = 348
76+
Height = 25
77+
Top = 16
78+
Width = 75
79+
Alignment = taCenter
80+
AutoSize = False
81+
Caption = 'Week'
82+
ParentColor = False
83+
end
84+
object lblHour: TLabel
85+
Left = 123
86+
Height = 25
87+
Top = 16
88+
Width = 75
89+
Alignment = taCenter
90+
AutoSize = False
91+
Caption = 'Hour'
92+
ParentColor = False
93+
end
94+
object lblMinute: TLabel
95+
Left = 48
96+
Height = 25
97+
Top = 17
98+
Width = 75
99+
Alignment = taCenter
100+
AutoSize = False
101+
Caption = 'Minute'
102+
ParentColor = False
103+
end
104+
end
105+
object timerChange: TTimer[2]
106+
Enabled = False
107+
OnTimer = timerChangeTimer
108+
Left = 416
109+
Top = 88
110+
end
111+
end

0 commit comments

Comments
 (0)