239 lines
6.9 KiB
ObjectPascal
239 lines
6.9 KiB
ObjectPascal
unit IDE.Wizard.WizardFormFilesHelper;
|
|
|
|
{
|
|
Inno Setup
|
|
Copyright (C) 1997-2024 Jordan Russell
|
|
Portions by Martijn Laan
|
|
For conditions of distribution and use, see LICENSE.TXT.
|
|
|
|
Helper to avoid duplicate code between WizardForm and FilesDesignerForm
|
|
}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Classes, Forms, StdCtrls,
|
|
DropListBox;
|
|
|
|
type
|
|
TWizardFormFilesHelper = class
|
|
private
|
|
FWizardFiles: TList;
|
|
FForm: TForm;
|
|
FNotCreateAppDirCheck: TCheckBox;
|
|
FFilesListBox: TDropListBox;
|
|
FEditButton: TButton;
|
|
FRemoveButton: TButton;
|
|
procedure AddWizardFile(const Source: String; const RecurseSubDirs, CreateAllSubDirs: Boolean);
|
|
function GetWizardFilesCount: Integer;
|
|
procedure UpdateWizardFiles;
|
|
procedure UpdateWizardFilesButtons;
|
|
procedure FilesListBoxClick(Sender: TObject);
|
|
procedure FilesListBoxDblClick(Sender: TObject);
|
|
procedure FilesListBoxDropFile(Sender: TDropListBox; const FileName: String);
|
|
procedure AddButtonClick(Sender: TObject);
|
|
procedure AddDirButtonClick(Sender: TObject);
|
|
procedure EditButtonClick(Sender: TObject);
|
|
procedure RemoveButtonClick(Sender: TObject);
|
|
public
|
|
constructor Create(const Form: TForm;
|
|
const NotCreateAppDirCheck: TCheckBox; const FilesListBox: TDropListBox;
|
|
const AddButton, AddDirButton, EditButton, RemoveButton: TButton);
|
|
destructor Destroy; override;
|
|
procedure AddScript(var Files: String);
|
|
property FilesCount: Integer read GetWizardFilesCount;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils, UITypes,
|
|
Shared.CommonFunc.Vcl, Shared.CommonFunc, BrowseFunc, PathFunc,
|
|
IDE.Messages, IDE.Wizard.WizardFileForm;
|
|
|
|
constructor TWizardFormFilesHelper.Create(const Form: TForm;
|
|
const NotCreateAppDirCheck: TCheckBox; const FilesListBox: TDropListBox;
|
|
const AddButton, AddDirButton, EditButton, RemoveButton: TButton);
|
|
begin
|
|
inherited Create;
|
|
|
|
FWizardFiles := TList.Create;
|
|
|
|
FForm := Form;
|
|
FNotCreateAppDirCheck := NotCreateAppDirCheck;
|
|
FFilesListBox := FilesListBox;
|
|
FEditButton := EditButton;
|
|
FRemoveButton := RemoveButton;
|
|
|
|
FilesListBox.OnClick := FilesListBoxClick;
|
|
FilesListBox.OnDblClick := FilesListBoxDblClick;
|
|
FilesListBox.OnDropFile := FilesListBoxDropFile;
|
|
AddButton.OnClick := AddButtonClick;
|
|
AddDirButton.OnClick := AddDirButtonClick;
|
|
EditButton.OnClick := EditButtonClick;
|
|
RemoveButton.OnClick := RemoveButtonClick;
|
|
|
|
UpdateWizardFilesButtons;
|
|
end;
|
|
|
|
destructor TWizardFormFilesHelper.Destroy;
|
|
begin
|
|
for var I := 0 to FWizardFiles.Count-1 do
|
|
Dispose(FWizardFiles[i]);
|
|
FWizardFiles.Free;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.AddWizardFile(const Source: String; const RecurseSubDirs, CreateAllSubDirs: Boolean);
|
|
var
|
|
WizardFile: PWizardFile;
|
|
begin
|
|
New(WizardFile);
|
|
WizardFile.Source := Source;
|
|
WizardFile.RecurseSubDirs := RecurseSubDirs;
|
|
WizardFile.CreateAllSubDirs := CreateAllSubDirs;
|
|
WizardFile.DestRootDirIsConstant := True;
|
|
if not FNotCreateAppDirCheck.Checked then
|
|
WizardFile.DestRootDir := '{app}'
|
|
else
|
|
WizardFile.DestRootDir := '{win}';
|
|
WizardFile.DestSubDir := '';
|
|
FWizardFiles.Add(WizardFile);
|
|
end;
|
|
|
|
function TWizardFormFilesHelper.GetWizardFilesCount: Integer;
|
|
begin
|
|
Result := FWizardFiles.Count;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.UpdateWizardFiles;
|
|
var
|
|
WizardFile: PWizardFile;
|
|
I: Integer;
|
|
begin
|
|
FFilesListBox.Items.BeginUpdate;
|
|
FFilesListBox.Items.Clear;
|
|
for I := 0 to FWizardFiles.Count-1 do begin
|
|
WizardFile := FWizardFiles[i];
|
|
FFilesListBox.Items.Add(WizardFile.Source);
|
|
end;
|
|
FFilesListBox.Items.EndUpdate;
|
|
UpdateHorizontalExtent(FFilesListBox);
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.UpdateWizardFilesButtons;
|
|
var
|
|
Enabled: Boolean;
|
|
begin
|
|
Enabled := FFilesListBox.ItemIndex >= 0;
|
|
FEditButton.Enabled := Enabled;
|
|
FRemoveButton.Enabled := Enabled;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.FilesListBoxClick(Sender: TObject);
|
|
begin
|
|
UpdateWizardFilesButtons;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.FilesListBoxDblClick(Sender: TObject);
|
|
begin
|
|
if FEditButton.Enabled then
|
|
FEditButton.Click;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.FilesListBoxDropFile(Sender: TDropListBox;
|
|
const FileName: String);
|
|
begin
|
|
if DirExists(FileName) then
|
|
AddWizardFile(AddBackslash(FileName) + '*', True, True)
|
|
else
|
|
AddWizardFile(FileName, False, False);
|
|
UpdateWizardFiles;
|
|
UpdateWizardFilesButtons;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.AddButtonClick(Sender: TObject);
|
|
var
|
|
FileList: TStringList;
|
|
I: Integer;
|
|
begin
|
|
FileList := TStringList.Create;
|
|
try
|
|
if NewGetOpenFileNameMulti('', FileList, '', SWizardAllFilesFilter, '', FForm.Handle) then begin
|
|
FileList.Sort;
|
|
for I := 0 to FileList.Count-1 do
|
|
AddWizardFile(FileList[I], False, False);
|
|
UpdateWizardFiles;
|
|
end;
|
|
finally
|
|
FileList.Free;
|
|
end
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.AddDirButtonClick(Sender: TObject);
|
|
var
|
|
Path: String;
|
|
Recurse: Boolean;
|
|
begin
|
|
Path := '';
|
|
if BrowseForFolder(SWizardAppFiles3, Path, FForm.Handle, False) then begin
|
|
case MsgBox(Format(SWizardAppFilesSubDirsMessage, [Path]), '', mbConfirmation, MB_YESNOCANCEL) of
|
|
IDYES: Recurse := True;
|
|
IDNO: Recurse := False;
|
|
else
|
|
Exit;
|
|
end;
|
|
AddWizardFile(AddBackslash(Path) + '*', Recurse, Recurse);
|
|
UpdateWizardFiles;
|
|
end;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.EditButtonClick(Sender: TObject);
|
|
var
|
|
WizardFileForm: TWizardFileForm;
|
|
Index: Integer;
|
|
begin
|
|
WizardFileForm := TWizardFileForm.Create(Application);
|
|
try
|
|
Index := FFilesListBox.ItemIndex;
|
|
WizardFileForm.AllowAppDestRootDir := not FNotCreateAppDirCheck.Checked;
|
|
WizardFileForm.WizardFile := FWizardFiles[Index];
|
|
if WizardFileForm.ShowModal = mrOk then begin
|
|
UpdateWizardFiles;
|
|
FFilesListBox.ItemIndex := Index;
|
|
FFilesListBox.TopIndex := Index;
|
|
UpdateWizardFilesButtons;
|
|
end;
|
|
finally
|
|
WizardFileForm.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.RemoveButtonClick(Sender: TObject);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
I := FFilesListBox.ItemIndex;
|
|
Dispose(FWizardFiles[I]);
|
|
FWizardFiles.Delete(I);
|
|
UpdateWizardFiles;
|
|
UpdateWizardFilesButtons;
|
|
end;
|
|
|
|
procedure TWizardFormFilesHelper.AddScript(var Files: String);
|
|
var
|
|
WizardFile: PWizardFile;
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to FWizardFiles.Count-1 do begin
|
|
WizardFile := FWizardFiles[I];
|
|
Files := Files + 'Source: "' + WizardFile.Source + '"; DestDir: "' + RemoveBackslashUnlessRoot(AddBackslash(WizardFile.DestRootDir) + WizardFile.DestSubDir) + '"; Flags: ignoreversion';
|
|
if WizardFile.RecurseSubDirs then
|
|
Files := Files + ' recursesubdirs';
|
|
if WizardFile.CreateAllSubDirs then
|
|
Files := Files + ' createallsubdirs';
|
|
Files := Files + SNewLine;
|
|
end;
|
|
end;
|
|
|
|
end.
|