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

239 lines
6.9 KiB
ObjectPascal
Raw Permalink Normal View History

unit IDE.Wizard.WizardFormFilesHelper;
2024-03-21 09:54:32 +01:00
{
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
}
2024-03-21 09:54:32 +01:00
interface
uses
2024-04-10 21:40:53 +02:00
Windows, Classes, Forms, StdCtrls,
2024-03-21 09:54:32 +01:00
DropListBox;
type
TWizardFormFilesHelper = class
private
FWizardFiles: TList;
2024-04-10 21:40:53 +02:00
FForm: TForm;
2024-03-21 09:54:32 +01:00
FNotCreateAppDirCheck: TCheckBox;
2024-03-21 10:02:46 +01:00
FFilesListBox: TDropListBox;
2024-03-22 09:31:10 +01:00
FEditButton: TButton;
FRemoveButton: TButton;
2024-03-21 09:54:32 +01:00
procedure AddWizardFile(const Source: String; const RecurseSubDirs, CreateAllSubDirs: Boolean);
2024-03-22 11:02:41 +01:00
function GetWizardFilesCount: Integer;
2024-03-21 09:54:32 +01:00
procedure UpdateWizardFiles;
2024-03-22 09:31:10 +01:00
procedure UpdateWizardFilesButtons;
procedure FilesListBoxClick(Sender: TObject);
procedure FilesListBoxDblClick(Sender: TObject);
procedure FilesListBoxDropFile(Sender: TDropListBox; const FileName: String);
2024-03-21 09:54:32 +01:00
procedure AddButtonClick(Sender: TObject);
2024-03-21 10:02:46 +01:00
procedure AddDirButtonClick(Sender: TObject);
2024-03-22 09:31:10 +01:00
procedure EditButtonClick(Sender: TObject);
procedure RemoveButtonClick(Sender: TObject);
2024-03-21 09:54:32 +01:00
public
2024-04-10 21:40:53 +02:00
constructor Create(const Form: TForm;
2024-03-22 09:31:10 +01:00
const NotCreateAppDirCheck: TCheckBox; const FilesListBox: TDropListBox;
const AddButton, AddDirButton, EditButton, RemoveButton: TButton);
2024-03-21 10:02:46 +01:00
destructor Destroy; override;
2024-03-22 09:31:10 +01:00
procedure AddScript(var Files: String);
2024-03-22 11:02:41 +01:00
property FilesCount: Integer read GetWizardFilesCount;
2024-03-21 09:54:32 +01:00
end;
implementation
uses
2024-04-10 21:40:53 +02:00
SysUtils, UITypes,
Shared.CommonFunc.Vcl, Shared.CommonFunc, BrowseFunc, PathFunc,
IDE.Messages, IDE.Wizard.WizardFileForm;
2024-03-21 09:54:32 +01:00
2024-04-10 21:40:53 +02:00
constructor TWizardFormFilesHelper.Create(const Form: TForm;
2024-03-22 09:31:10 +01:00
const NotCreateAppDirCheck: TCheckBox; const FilesListBox: TDropListBox;
const AddButton, AddDirButton, EditButton, RemoveButton: TButton);
2024-03-21 09:54:32 +01:00
begin
inherited Create;
FWizardFiles := TList.Create;
2024-04-10 21:40:53 +02:00
FForm := Form;
2024-03-21 09:54:32 +01:00
FNotCreateAppDirCheck := NotCreateAppDirCheck;
2024-03-22 09:31:10 +01:00
FFilesListBox := FilesListBox;
FEditButton := EditButton;
FRemoveButton := RemoveButton;
2024-03-21 09:54:32 +01:00
2024-03-22 09:31:10 +01:00
FilesListBox.OnClick := FilesListBoxClick;
FilesListBox.OnDblClick := FilesListBoxDblClick;
FilesListBox.OnDropFile := FilesListBoxDropFile;
2024-03-21 10:02:46 +01:00
AddButton.OnClick := AddButtonClick;
AddDirButton.OnClick := AddDirButtonClick;
2024-03-22 09:31:10 +01:00
EditButton.OnClick := EditButtonClick;
RemoveButton.OnClick := RemoveButtonClick;
UpdateWizardFilesButtons;
2024-03-21 09:54:32 +01:00
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;
2024-03-22 11:02:41 +01:00
function TWizardFormFilesHelper.GetWizardFilesCount: Integer;
begin
Result := FWizardFiles.Count;
end;
2024-03-21 09:54:32 +01:00
procedure TWizardFormFilesHelper.UpdateWizardFiles;
var
WizardFile: PWizardFile;
I: Integer;
begin
2024-03-21 10:02:46 +01:00
FFilesListBox.Items.BeginUpdate;
FFilesListBox.Items.Clear;
2024-03-21 09:54:32 +01:00
for I := 0 to FWizardFiles.Count-1 do begin
WizardFile := FWizardFiles[i];
2024-03-21 10:02:46 +01:00
FFilesListBox.Items.Add(WizardFile.Source);
2024-03-21 09:54:32 +01:00
end;
2024-03-21 10:02:46 +01:00
FFilesListBox.Items.EndUpdate;
UpdateHorizontalExtent(FFilesListBox);
2024-03-21 09:54:32 +01:00
end;
2024-03-22 09:31:10 +01:00
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;
2024-03-21 09:54:32 +01:00
procedure TWizardFormFilesHelper.AddButtonClick(Sender: TObject);
var
FileList: TStringList;
I: Integer;
begin
FileList := TStringList.Create;
try
2024-04-10 21:40:53 +02:00
if NewGetOpenFileNameMulti('', FileList, '', SWizardAllFilesFilter, '', FForm.Handle) then begin
2024-03-21 09:54:32 +01:00
FileList.Sort;
for I := 0 to FileList.Count-1 do
AddWizardFile(FileList[I], False, False);
UpdateWizardFiles;
end;
finally
FileList.Free;
end
end;
2024-03-21 10:02:46 +01:00
procedure TWizardFormFilesHelper.AddDirButtonClick(Sender: TObject);
var
Path: String;
Recurse: Boolean;
begin
Path := '';
2024-04-10 21:40:53 +02:00
if BrowseForFolder(SWizardAppFiles3, Path, FForm.Handle, False) then begin
2024-03-21 10:02:46 +01:00
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;
2024-03-22 09:31:10 +01:00
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;
2024-03-21 09:54:32 +01:00
end.