-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUConfigDialog.pas
155 lines (123 loc) · 4.51 KB
/
UConfigDialog.pas
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
unit UConfigDialog;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls, Dialogs, StrUtils,
ConfigManager, ConfigState, PCRE;
type
TConfigDialog = class(TForm, IConfigObserver)
OKBtn: TButton;
CancelBtn: TButton;
AutoSaveGroup: TGroupBox;
ASDirectoryDialog: TSaveDialog;
ASFileMaskEdit: TEdit;
ASDirectoryEdit: TEdit;
ASFileMaskLabel: TLabel;
ASDirectoryLabel: TLabel;
ASCurrentFileDisplay: TLabel;
ASEnabledCheck: TCheckBox;
ASHelpText: TLabel;
TrayIconGroup: TGroupBox;
TrayIconEnabledCheck: TCheckBox;
ASDirectoryBrowseButton: TButton;
procedure ASDirectoryBrowseButtonClick(Sender: TObject);
procedure ASFileMaskEditChange(Sender: TObject);
procedure ASDirectoryEditChange(Sender: TObject);
procedure ASEnabledCheckClick(Sender: TObject);
procedure OKBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
private
FASDirectoryName: String;
FASFileMask: String;
FConfigManager: TConfigManager;
procedure UpdateASFileMaskDisplay;
procedure LoadDialogFromState(const NewState: TConfigState);
procedure SaveDialogToState;
public
procedure IConfigObserver.Update = ConfigUpdate;
procedure ConfigUpdate(Subject: TConfigManager);
end;
var
ConfigDialog: TConfigDialog;
implementation
{$R *.dfm}
procedure TConfigDialog.ConfigUpdate(Subject: TConfigManager);
begin
If FConfigManager = Nil
Then Begin
FConfigManager := Subject;
FConfigManager.AttachObserver(Self);
End;
LoadDialogFromState(Subject.CurrentState);
end;
procedure TConfigDialog.ASDirectoryBrowseButtonClick(Sender: TObject);
begin
ASDirectoryDialog.InitialDir := FASDirectoryName;
ASDirectoryDialog.FileName := FASFileMask;
If ASDirectoryDialog.Execute
Then Begin
FASDirectoryName := ExtractFileDir(ASDirectoryDialog.FileName);
FASFileMask := ExtractFileName(ASDirectoryDialog.FileName);
UpdateASFileMaskDisplay;
End;
end;
procedure TConfigDialog.ASDirectoryEditChange(Sender: TObject);
begin
FASDirectoryName := ASDirectoryEdit.Text;
UpdateASFileMaskDisplay;
end;
procedure TConfigDialog.ASEnabledCheckClick(Sender: TObject);
begin
ASFileMaskEdit.Enabled := ASEnabledCheck.Checked;
ASDirectoryEdit.Enabled := ASEnabledCheck.Checked;
ASDirectoryBrowseButton.Enabled := ASEnabledCheck.Checked;
end;
procedure TConfigDialog.ASFileMaskEditChange(Sender: TObject);
begin
FASFileMask := ASFileMaskEdit.Text;
UpdateASFileMaskDisplay;
end;
procedure TConfigDialog.UpdateASFileMaskDisplay;
begin
ASFileMaskEdit.Text := FASFileMask;
ASDirectoryEdit.Text := FASDirectoryName;
ASCurrentFileDisplay.Caption :=
'Current Filename: '
+ TConfigManager.ApplyDateMask(FASDirectoryName + '\' + FASFileMask);
ASCurrentFileDisplay.Visible := True;
end;
procedure TConfigDialog.LoadDialogFromState(const NewState: TConfigState);
begin
// Auto-save enabled?
ASEnabledCheck.Checked := NewState.BooleanValues['Autosave', 'Enabled'];
ASFileMaskEdit.Enabled := ASEnabledCheck.Checked;
ASDirectoryEdit.Enabled := ASEnabledCheck.Checked;
ASDirectoryBrowseButton.Enabled := ASEnabledCheck.Checked;
// Auto-save params
FASDirectoryName := NewState['Autosave', 'Directory'];
FASFileMask := NewState['Autosave', 'Filemask'];
UpdateASFileMaskDisplay;
// Tray Icon enabled?
TrayIconEnabledCheck.Checked := NewState.BooleanValues['TrayIcon', 'Enabled'];
end;
procedure TConfigDialog.SaveDialogToState;
var
NewState: TConfigState;
begin
NewState := TConfigState.Clone(FConfigManager.CurrentState);
NewState.BooleanValues['Autosave', 'Enabled'] := ASEnabledCheck.Checked;
NewState['Autosave', 'Directory'] := FASDirectoryName;
NewState['Autosave', 'Filemask'] := FASFileMask;
NewState.BooleanValues['TrayIcon', 'Enabled'] := TrayIconEnabledCheck.Checked;
FConfigManager.CurrentState := NewState;
NewState.Free;
end;
procedure TConfigDialog.OKBtnClick(Sender: TObject);
begin
SaveDialogToState;
end;
procedure TConfigDialog.CancelBtnClick(Sender: TObject);
begin
// Reset dialog to currently active config state
LoadDialogFromState( FConfigManager.CurrentState );
end;
end.