Inno-Setup-issrc/Projects/Src/IDE.Wizard.WizardFileForm.pas

195 lines
5.5 KiB
ObjectPascal

unit IDE.Wizard.WizardFileForm;
{
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
IDE.Messages, Shared.CommonFunc.Vcl, Shared.CommonFunc, IDE.HelperFunc;
{$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.