forked from jrsoftware/issrc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCompWizardFile.pas
194 lines (162 loc) · 5.49 KB
/
CompWizardFile.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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
unit CompWizardFile;
{
Inno Setup
Copyright (C) 1997-2020 Jordan Russell
Portions by Martijn Laan
For conditions of distribution and use, see LICENSE.TXT.
Compiler IDE Script Wizard File form
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
UIStateForm, StdCtrls, ExtCtrls, NewStaticText;
type
PWizardFile = ^TWizardFile;
TWizardFile = record
Source: String;
RecurseSubDirs: Boolean;
CreateAllSubDirs: Boolean;
DestRootDir: String;
DestRootDirIsConstant: Boolean;
DestSubDir: String;
end;
TWizardFileForm = class(TUIStateForm)
OKButton: TButton;
CancelButton: TButton;
GroupBox2: TGroupBox;
DestRootDirComboBox: TComboBox;
DestRootDirEdit: TEdit;
DestRootDirLabel: TNewStaticText;
DestSubDirEdit: TEdit;
SubDirLabel: TNewStaticText;
RequiredLabel1: TNewStaticText;
RequiredLabel2: TNewStaticText;
GroupBox1: TGroupBox;
SourceLabel: TNewStaticText;
SourceEdit: TEdit;
RecurseSubDirsCheck: TCheckBox;
CreateAllSubDirsCheck: TCheckBox;
procedure OKButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DestRootDirComboBoxChange(Sender: TObject);
procedure RecurseSubDirsCheckClick(Sender: TObject);
private
FAllowAppDestRootDir: Boolean;
FWizardFile: PWizardFile;
procedure SetWizardFile(WizardFile: PWizardFile);
procedure UpdateUI;
public
property AllowAppDestRootDir: Boolean write FAllowAppDestRootDir;
property WizardFile: PWizardFile write SetWizardFile;
end;
implementation
uses
CompMsgs2, CmnFunc, CmnFunc2, CompFunc;
{$R *.DFM}
type
TConstant = record
Constant, Description: String;
end;
const
DestRootDirs: array[0..6] of TConstant =
(
( Constant: '{app}'; Description: 'Application directory'),
( Constant: '{autopf}'; Description: 'Program Files directory'),
( Constant: '{autocf}'; Description: 'Common Files directory'),
( Constant: '{win}'; Description: 'Windows directory'),
( Constant: '{sys}'; Description: 'Windows system directory'),
( Constant: '{src}'; Description: 'Setup source directory'),
( Constant: '{sd}'; Description: 'System drive root directory')
);
procedure TWizardFileForm.SetWizardFile(WizardFile: PWizardFile);
var
I: Integer;
begin
FWizardFile := WizardFile;
SourceEdit.Text := WizardFile.Source;
RecurseSubDirsCheck.Checked := WizardFile.RecurseSubDirs;
CreateAllSubDirsCheck.Checked := WizardFile.CreateAllSubDirs;
if WizardFile.DestRootDirIsConstant then begin
for I := Low(DestRootDirs) to High(DestRootDirs) do begin
if DestRootDirs[I].Constant = WizardFile.DestRootDir then begin
DestRootDirComboBox.ItemIndex := I;
Break;
end;
end;
end else begin
DestRootDirComboBox.ItemIndex := DestRootDirComboBox.Items.Count-1;
DestRootDirEdit.Text := WizardFile.DestRootDir;
end;
DestSubDirEdit.Text := WizardFile.DestSubDir;
UpdateUI;
end;
{ --- }
procedure TWizardFileForm.FormCreate(Sender: TObject);
procedure MakeBold(const Ctl: TNewStaticText);
begin
Ctl.Font.Style := [fsBold];
end;
var
I: Integer;
begin
InitFormFont(Self);
MakeBold(SourceLabel);
MakeBold(DestRootDirLabel);
MakeBold(RequiredLabel1);
RequiredLabel2.Left := RequiredLabel1.Left + RequiredLabel1.Width;
for I := Low(DestRootDirs) to High(DestRootDirs) do
DestRootDirComboBox.Items.Add(DestRootDirs[I].Description);
DestRootDirComboBox.Items.Add('(Custom)');
DestRootDirComboBox.ItemIndex := 0;
end;
{ --- }
procedure TWizardFileForm.UpdateUI;
begin
CreateAllSubDirsCheck.Enabled := RecurseSubDirsCheck.Checked;
if DestRootDirComboBox.ItemIndex = DestRootDirComboBox.Items.Count-1 then begin
DestRootDirEdit.Enabled := True;
DestRootDirEdit.Color := clWindow;
end else begin
DestRootDirEdit.Enabled := False;
DestRootDirEdit.Color := clBtnFace;
end;
end;
{ --- }
procedure TWizardFileForm.RecurseSubDirsCheckClick(Sender: TObject);
begin
UpdateUI;
end;
procedure TWizardFileForm.DestRootDirComboBoxChange(Sender: TObject);
begin
UpdateUI;
if DestRootDirEdit.Enabled then
ActiveControl := DestRootDirEdit;
end;
procedure TWizardFileForm.OKButtonClick(Sender: TObject);
var
DestRootDirIndex: Integer;
begin
ModalResult := mrNone;
DestRootDirIndex := DestRootDirComboBox.ItemIndex;
if (DestRootDirIndex = DestRootDirComboBox.Items.Count-1) and (DestRootDirEdit.Text = '') then begin
MsgBox(SWizardFileDestRootDirError, '', mbError, MB_OK);
ActiveControl := DestRootDirEdit;
end else if (DestRootDirs[DestRootDirIndex].Constant = '{app}') and not FAllowAppDestRootDir then begin
MsgBox(SWizardFileAppDestRootDirError, '', mbError, MB_OK);
ActiveControl := DestRootDirComboBox;
end else
ModalResult := mrOk;
if ModalResult = mrOk then begin
FWizardFile.RecurseSubDirs := RecurseSubDirsCheck.Checked;
FWizardFile.CreateAllSubDirs := CreateAllSubDirsCheck.Checked;
if DestRootDirIndex = DestRootDirComboBox.Items.Count-1 then begin
FWizardFile.DestRootDir := DestRootDirEdit.Text;
FWizardFile.DestRootDirIsConstant := False;
end else begin
FWizardFile.DestRootDir := DestRootDirs[DestRootDirIndex].Constant;
FWizardFile.DestRootDirIsConstant := True;
end;
FWizardFile.DestSubDir := DestSubDirEdit.Text;
end;
end;
end.