CompWizardFile.pas 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. unit CompWizardFile;
  2. {
  3. Inno Setup
  4. Copyright (C) 1997-2020 Jordan Russell
  5. Portions by Martijn Laan
  6. For conditions of distribution and use, see LICENSE.TXT.
  7. Compiler IDE Script Wizard File form
  8. }
  9. interface
  10. uses
  11. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  12. UIStateForm, StdCtrls, ExtCtrls, NewStaticText;
  13. type
  14. PWizardFile = ^TWizardFile;
  15. TWizardFile = record
  16. Source: String;
  17. RecurseSubDirs: Boolean;
  18. CreateAllSubDirs: Boolean;
  19. DestRootDir: String;
  20. DestRootDirIsConstant: Boolean;
  21. DestSubDir: String;
  22. end;
  23. TWizardFileForm = class(TUIStateForm)
  24. OKButton: TButton;
  25. CancelButton: TButton;
  26. GroupBox2: TGroupBox;
  27. DestRootDirComboBox: TComboBox;
  28. DestRootDirEdit: TEdit;
  29. DestRootDirLabel: TNewStaticText;
  30. DestSubDirEdit: TEdit;
  31. SubDirLabel: TNewStaticText;
  32. RequiredLabel1: TNewStaticText;
  33. RequiredLabel2: TNewStaticText;
  34. GroupBox1: TGroupBox;
  35. SourceLabel: TNewStaticText;
  36. SourceEdit: TEdit;
  37. RecurseSubDirsCheck: TCheckBox;
  38. CreateAllSubDirsCheck: TCheckBox;
  39. procedure OKButtonClick(Sender: TObject);
  40. procedure FormCreate(Sender: TObject);
  41. procedure DestRootDirComboBoxChange(Sender: TObject);
  42. procedure RecurseSubDirsCheckClick(Sender: TObject);
  43. private
  44. FAllowAppDestRootDir: Boolean;
  45. FWizardFile: PWizardFile;
  46. procedure SetWizardFile(WizardFile: PWizardFile);
  47. procedure UpdateUI;
  48. public
  49. property AllowAppDestRootDir: Boolean write FAllowAppDestRootDir;
  50. property WizardFile: PWizardFile write SetWizardFile;
  51. end;
  52. implementation
  53. uses
  54. CompMsgs, CmnFunc, CmnFunc2, CompFunc;
  55. {$R *.DFM}
  56. type
  57. TConstant = record
  58. Constant, Description: String;
  59. end;
  60. const
  61. DestRootDirs: array[0..6] of TConstant =
  62. (
  63. ( Constant: '{app}'; Description: 'Application directory'),
  64. ( Constant: '{autopf}'; Description: 'Program Files directory'),
  65. ( Constant: '{autocf}'; Description: 'Common Files directory'),
  66. ( Constant: '{win}'; Description: 'Windows directory'),
  67. ( Constant: '{sys}'; Description: 'Windows system directory'),
  68. ( Constant: '{src}'; Description: 'Setup source directory'),
  69. ( Constant: '{sd}'; Description: 'System drive root directory')
  70. );
  71. procedure TWizardFileForm.SetWizardFile(WizardFile: PWizardFile);
  72. var
  73. I: Integer;
  74. begin
  75. FWizardFile := WizardFile;
  76. SourceEdit.Text := WizardFile.Source;
  77. RecurseSubDirsCheck.Checked := WizardFile.RecurseSubDirs;
  78. CreateAllSubDirsCheck.Checked := WizardFile.CreateAllSubDirs;
  79. if WizardFile.DestRootDirIsConstant then begin
  80. for I := Low(DestRootDirs) to High(DestRootDirs) do begin
  81. if DestRootDirs[I].Constant = WizardFile.DestRootDir then begin
  82. DestRootDirComboBox.ItemIndex := I;
  83. Break;
  84. end;
  85. end;
  86. end else begin
  87. DestRootDirComboBox.ItemIndex := DestRootDirComboBox.Items.Count-1;
  88. DestRootDirEdit.Text := WizardFile.DestRootDir;
  89. end;
  90. DestSubDirEdit.Text := WizardFile.DestSubDir;
  91. UpdateUI;
  92. end;
  93. { --- }
  94. procedure TWizardFileForm.FormCreate(Sender: TObject);
  95. procedure MakeBold(const Ctl: TNewStaticText);
  96. begin
  97. Ctl.Font.Style := [fsBold];
  98. end;
  99. var
  100. I: Integer;
  101. begin
  102. InitFormFont(Self);
  103. MakeBold(SourceLabel);
  104. MakeBold(DestRootDirLabel);
  105. MakeBold(RequiredLabel1);
  106. RequiredLabel2.Left := RequiredLabel1.Left + RequiredLabel1.Width;
  107. for I := Low(DestRootDirs) to High(DestRootDirs) do
  108. DestRootDirComboBox.Items.Add(DestRootDirs[I].Description);
  109. DestRootDirComboBox.Items.Add('(Custom)');
  110. DestRootDirComboBox.ItemIndex := 0;
  111. end;
  112. { --- }
  113. procedure TWizardFileForm.UpdateUI;
  114. begin
  115. CreateAllSubDirsCheck.Enabled := RecurseSubDirsCheck.Checked;
  116. if DestRootDirComboBox.ItemIndex = DestRootDirComboBox.Items.Count-1 then begin
  117. DestRootDirEdit.Enabled := True;
  118. DestRootDirEdit.Color := clWindow;
  119. end else begin
  120. DestRootDirEdit.Enabled := False;
  121. DestRootDirEdit.Color := clBtnFace;
  122. end;
  123. end;
  124. { --- }
  125. procedure TWizardFileForm.RecurseSubDirsCheckClick(Sender: TObject);
  126. begin
  127. UpdateUI;
  128. end;
  129. procedure TWizardFileForm.DestRootDirComboBoxChange(Sender: TObject);
  130. begin
  131. UpdateUI;
  132. if DestRootDirEdit.Enabled then
  133. ActiveControl := DestRootDirEdit;
  134. end;
  135. procedure TWizardFileForm.OKButtonClick(Sender: TObject);
  136. var
  137. DestRootDirIndex: Integer;
  138. begin
  139. ModalResult := mrNone;
  140. DestRootDirIndex := DestRootDirComboBox.ItemIndex;
  141. if (DestRootDirIndex = DestRootDirComboBox.Items.Count-1) and (DestRootDirEdit.Text = '') then begin
  142. MsgBox(SWizardFileDestRootDirError, '', mbError, MB_OK);
  143. ActiveControl := DestRootDirEdit;
  144. end else if (DestRootDirs[DestRootDirIndex].Constant = '{app}') and not FAllowAppDestRootDir then begin
  145. MsgBox(SWizardFileAppDestRootDirError, '', mbError, MB_OK);
  146. ActiveControl := DestRootDirComboBox;
  147. end else
  148. ModalResult := mrOk;
  149. if ModalResult = mrOk then begin
  150. FWizardFile.RecurseSubDirs := RecurseSubDirsCheck.Checked;
  151. FWizardFile.CreateAllSubDirs := CreateAllSubDirsCheck.Checked;
  152. if DestRootDirIndex = DestRootDirComboBox.Items.Count-1 then begin
  153. FWizardFile.DestRootDir := DestRootDirEdit.Text;
  154. FWizardFile.DestRootDirIsConstant := False;
  155. end else begin
  156. FWizardFile.DestRootDir := DestRootDirs[DestRootDirIndex].Constant;
  157. FWizardFile.DestRootDirIsConstant := True;
  158. end;
  159. FWizardFile.DestSubDir := DestSubDirEdit.Text;
  160. end;
  161. end;
  162. end.