2
0

CompWizardFilesHelper.pas 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. unit CompWizardFilesHelper;
  2. interface
  3. uses
  4. Windows, Classes, StdCtrls,
  5. DropListBox;
  6. type
  7. TWizardFormFilesHelper = class
  8. private
  9. FWizardFiles: TList;
  10. FHandle: HWND;
  11. FNotCreateAppDirCheck: TCheckBox;
  12. FFilesListBox: TDropListBox;
  13. FEditButton: TButton;
  14. FRemoveButton: TButton;
  15. procedure AddWizardFile(const Source: String; const RecurseSubDirs, CreateAllSubDirs: Boolean);
  16. function GetWizardFilesCount: Integer;
  17. procedure UpdateWizardFiles;
  18. procedure UpdateWizardFilesButtons;
  19. procedure FilesListBoxClick(Sender: TObject);
  20. procedure FilesListBoxDblClick(Sender: TObject);
  21. procedure FilesListBoxDropFile(Sender: TDropListBox; const FileName: String);
  22. procedure AddButtonClick(Sender: TObject);
  23. procedure AddDirButtonClick(Sender: TObject);
  24. procedure EditButtonClick(Sender: TObject);
  25. procedure RemoveButtonClick(Sender: TObject);
  26. public
  27. constructor Create(const Handle: HWND;
  28. const NotCreateAppDirCheck: TCheckBox; const FilesListBox: TDropListBox;
  29. const AddButton, AddDirButton, EditButton, RemoveButton: TButton);
  30. destructor Destroy; override;
  31. procedure AddScript(var Files: String);
  32. property FilesCount: Integer read GetWizardFilesCount;
  33. end;
  34. implementation
  35. uses
  36. SysUtils, Forms, UITypes,
  37. CmnFunc, CmnFunc2, BrowseFunc, PathFunc,
  38. CompMsgs, CompWizardFile;
  39. constructor TWizardFormFilesHelper.Create(const Handle: HWND;
  40. const NotCreateAppDirCheck: TCheckBox; const FilesListBox: TDropListBox;
  41. const AddButton, AddDirButton, EditButton, RemoveButton: TButton);
  42. begin
  43. inherited Create;
  44. FWizardFiles := TList.Create;
  45. FHandle := Handle;
  46. FNotCreateAppDirCheck := NotCreateAppDirCheck;
  47. FFilesListBox := FilesListBox;
  48. FEditButton := EditButton;
  49. FRemoveButton := RemoveButton;
  50. FilesListBox.OnClick := FilesListBoxClick;
  51. FilesListBox.OnDblClick := FilesListBoxDblClick;
  52. FilesListBox.OnDropFile := FilesListBoxDropFile;
  53. AddButton.OnClick := AddButtonClick;
  54. AddDirButton.OnClick := AddDirButtonClick;
  55. EditButton.OnClick := EditButtonClick;
  56. RemoveButton.OnClick := RemoveButtonClick;
  57. UpdateWizardFilesButtons;
  58. end;
  59. destructor TWizardFormFilesHelper.Destroy;
  60. begin
  61. for var I := 0 to FWizardFiles.Count-1 do
  62. Dispose(FWizardFiles[i]);
  63. FWizardFiles.Free;
  64. end;
  65. procedure TWizardFormFilesHelper.AddWizardFile(const Source: String; const RecurseSubDirs, CreateAllSubDirs: Boolean);
  66. var
  67. WizardFile: PWizardFile;
  68. begin
  69. New(WizardFile);
  70. WizardFile.Source := Source;
  71. WizardFile.RecurseSubDirs := RecurseSubDirs;
  72. WizardFile.CreateAllSubDirs := CreateAllSubDirs;
  73. WizardFile.DestRootDirIsConstant := True;
  74. if not FNotCreateAppDirCheck.Checked then
  75. WizardFile.DestRootDir := '{app}'
  76. else
  77. WizardFile.DestRootDir := '{win}';
  78. WizardFile.DestSubDir := '';
  79. FWizardFiles.Add(WizardFile);
  80. end;
  81. function TWizardFormFilesHelper.GetWizardFilesCount: Integer;
  82. begin
  83. Result := FWizardFiles.Count;
  84. end;
  85. procedure TWizardFormFilesHelper.UpdateWizardFiles;
  86. var
  87. WizardFile: PWizardFile;
  88. I: Integer;
  89. begin
  90. FFilesListBox.Items.BeginUpdate;
  91. FFilesListBox.Items.Clear;
  92. for I := 0 to FWizardFiles.Count-1 do begin
  93. WizardFile := FWizardFiles[i];
  94. FFilesListBox.Items.Add(WizardFile.Source);
  95. end;
  96. FFilesListBox.Items.EndUpdate;
  97. UpdateHorizontalExtent(FFilesListBox);
  98. end;
  99. procedure TWizardFormFilesHelper.UpdateWizardFilesButtons;
  100. var
  101. Enabled: Boolean;
  102. begin
  103. Enabled := FFilesListBox.ItemIndex >= 0;
  104. FEditButton.Enabled := Enabled;
  105. FRemoveButton.Enabled := Enabled;
  106. end;
  107. procedure TWizardFormFilesHelper.FilesListBoxClick(Sender: TObject);
  108. begin
  109. UpdateWizardFilesButtons;
  110. end;
  111. procedure TWizardFormFilesHelper.FilesListBoxDblClick(Sender: TObject);
  112. begin
  113. if FEditButton.Enabled then
  114. FEditButton.Click;
  115. end;
  116. procedure TWizardFormFilesHelper.FilesListBoxDropFile(Sender: TDropListBox;
  117. const FileName: String);
  118. begin
  119. if DirExists(FileName) then
  120. AddWizardFile(AddBackslash(FileName) + '*', True, True)
  121. else
  122. AddWizardFile(FileName, False, False);
  123. UpdateWizardFiles;
  124. UpdateWizardFilesButtons;
  125. end;
  126. procedure TWizardFormFilesHelper.AddButtonClick(Sender: TObject);
  127. var
  128. FileList: TStringList;
  129. I: Integer;
  130. begin
  131. FileList := TStringList.Create;
  132. try
  133. if NewGetOpenFileNameMulti('', FileList, '', SWizardAllFilesFilter, '', FHandle) then begin
  134. FileList.Sort;
  135. for I := 0 to FileList.Count-1 do
  136. AddWizardFile(FileList[I], False, False);
  137. UpdateWizardFiles;
  138. end;
  139. finally
  140. FileList.Free;
  141. end
  142. end;
  143. procedure TWizardFormFilesHelper.AddDirButtonClick(Sender: TObject);
  144. var
  145. Path: String;
  146. Recurse: Boolean;
  147. begin
  148. Path := '';
  149. if BrowseForFolder(SWizardAppFiles3, Path, FHandle, False) then begin
  150. case MsgBox(Format(SWizardAppFilesSubDirsMessage, [Path]), '', mbConfirmation, MB_YESNOCANCEL) of
  151. IDYES: Recurse := True;
  152. IDNO: Recurse := False;
  153. else
  154. Exit;
  155. end;
  156. AddWizardFile(AddBackslash(Path) + '*', Recurse, Recurse);
  157. UpdateWizardFiles;
  158. end;
  159. end;
  160. procedure TWizardFormFilesHelper.EditButtonClick(Sender: TObject);
  161. var
  162. WizardFileForm: TWizardFileForm;
  163. Index: Integer;
  164. begin
  165. WizardFileForm := TWizardFileForm.Create(Application);
  166. try
  167. Index := FFilesListBox.ItemIndex;
  168. WizardFileForm.AllowAppDestRootDir := not FNotCreateAppDirCheck.Checked;
  169. WizardFileForm.WizardFile := FWizardFiles[Index];
  170. if WizardFileForm.ShowModal = mrOk then begin
  171. UpdateWizardFiles;
  172. FFilesListBox.ItemIndex := Index;
  173. FFilesListBox.TopIndex := Index;
  174. UpdateWizardFilesButtons;
  175. end;
  176. finally
  177. WizardFileForm.Free;
  178. end;
  179. end;
  180. procedure TWizardFormFilesHelper.RemoveButtonClick(Sender: TObject);
  181. var
  182. I: Integer;
  183. begin
  184. I := FFilesListBox.ItemIndex;
  185. Dispose(FWizardFiles[I]);
  186. FWizardFiles.Delete(I);
  187. UpdateWizardFiles;
  188. UpdateWizardFilesButtons;
  189. end;
  190. procedure TWizardFormFilesHelper.AddScript(var Files: String);
  191. var
  192. WizardFile: PWizardFile;
  193. I: Integer;
  194. begin
  195. for I := 0 to FWizardFiles.Count-1 do begin
  196. WizardFile := FWizardFiles[I];
  197. Files := Files + 'Source: "' + WizardFile.Source + '"; DestDir: "' + RemoveBackslashUnlessRoot(AddBackslash(WizardFile.DestRootDir) + WizardFile.DestSubDir) + '"; Flags: ignoreversion';
  198. if WizardFile.RecurseSubDirs then
  199. Files := Files + ' recursesubdirs';
  200. if WizardFile.CreateAllSubDirs then
  201. Files := Files + ' createallsubdirs';
  202. Files := Files + SNewLine;
  203. end;
  204. end;
  205. end.