IDE.SignToolsForm.pas 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. unit IDE.SignToolsForm;
  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 SignTools form
  8. }
  9. interface
  10. uses
  11. Classes, Controls, StdCtrls, UIStateForm;
  12. type
  13. TSignToolsForm = class(TUIStateForm)
  14. OKButton: TButton;
  15. CancelButton: TButton;
  16. GroupBox1: TGroupBox;
  17. SignToolsListBox: TListBox;
  18. AddButton: TButton;
  19. RemoveButton: TButton;
  20. EditButton: TButton;
  21. procedure SignToolsListBoxClick(Sender: TObject);
  22. procedure FormCreate(Sender: TObject);
  23. procedure FormDestroy(Sender: TObject);
  24. procedure AddButtonClick(Sender: TObject);
  25. procedure RemoveButtonClick(Sender: TObject);
  26. procedure EditButtonClick(Sender: TObject);
  27. procedure SignToolsListBoxDblClick(Sender: TObject);
  28. private
  29. FSignTools: TStringList;
  30. procedure CommandDocBitBtnClick(Sender: TObject);
  31. procedure UpdateSignTools;
  32. procedure UpdateSignToolsButtons;
  33. procedure SetSignTools(SignTools: TStringList);
  34. function InputSignTool(var SignToolName, SignToolCommand: String;
  35. ExistingIndex: Integer): Boolean;
  36. protected
  37. procedure CreateWnd; override;
  38. procedure CreateParams(var Params: TCreateParams); override;
  39. public
  40. property SignTools: TStringList read FSignTools write SetSignTools;
  41. end;
  42. implementation
  43. uses
  44. Windows, Messages, SysUtils, Dialogs,
  45. Shared.CommonFunc.Vcl, IDE.InputQueryMemoForm, IDE.HelperFunc,
  46. IDE.HtmlHelpFunc;
  47. {$R *.DFM}
  48. procedure TSignToolsForm.UpdateSignTools;
  49. begin
  50. SignToolsListBox.Items.Assign(FSignTools);
  51. UpdateHorizontalExtent(SignToolsListBox);
  52. end;
  53. procedure TSignToolsForm.UpdateSignToolsButtons;
  54. var
  55. Enabled: Boolean;
  56. begin
  57. Enabled := SignToolsListBox.ItemIndex >= 0;
  58. EditButton.Enabled := Enabled;
  59. RemoveButton.Enabled := Enabled;
  60. end;
  61. procedure TSignToolsForm.SetSignTools(SignTools: TStringList);
  62. begin
  63. FSignTools.Assign(SignTools);
  64. UpdateSignTools;
  65. UpdateSignToolsButtons;
  66. end;
  67. procedure TSignToolsForm.FormCreate(Sender: TObject);
  68. begin
  69. FSignTools := TStringList.Create();
  70. InitFormFont(Self);
  71. InitFormTheme(Self);
  72. end;
  73. { This and CreateParams make bsSizeable (which has an unwanted icon) look like bsDialog, see:
  74. https://stackoverflow.com/questions/32096482/delphi-resizable-bsdialog-form/32098633 }
  75. procedure TSignToolsForm.CreateWnd;
  76. begin
  77. inherited;
  78. SendMessage(Handle, WM_SETICON, ICON_BIG, 0);
  79. end;
  80. procedure TSignToolsForm.CommandDocBitBtnClick(Sender: TObject);
  81. begin
  82. if Assigned(HtmlHelp) then
  83. HtmlHelp(GetDesktopWindow, PChar(GetHelpFile), HH_DISPLAY_TOPIC, Cardinal(PChar('topic_setup_signtool.htm')));
  84. end;
  85. procedure TSignToolsForm.CreateParams(var Params: TCreateParams);
  86. begin
  87. inherited CreateParams(Params);
  88. Params.ExStyle := Params.ExStyle or WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE;
  89. end;
  90. procedure TSignToolsForm.FormDestroy(Sender: TObject);
  91. begin
  92. FSignTools.Free();
  93. end;
  94. function TSignToolsForm.InputSignTool(var SignToolName, SignToolCommand: String;
  95. ExistingIndex: Integer): Boolean;
  96. var
  97. I: Integer;
  98. begin
  99. Result := False;
  100. if InputQuery(Caption, 'Name of the Sign Tool:', SignToolName) then begin
  101. if (SignToolName = '') or (Pos('=', SignToolName) <> 0) then begin
  102. AppMessageBox(PChar('Invalid name.'), PChar(Caption), MB_OK or MB_ICONSTOP);
  103. Exit;
  104. end;
  105. for I := 0 to FSignTools.Count-1 do begin
  106. if (I <> ExistingIndex) and (Pos(SignToolName + '=', FSignTools[I]) = 1) then begin
  107. AppMessageBox(PChar('Duplicate name.'), PChar(Caption), MB_OK or MB_ICONSTOP);
  108. Exit;
  109. end;
  110. end;
  111. if InputQueryMemo(Caption, 'Command of the Sign Tool:', SignToolCommand, True, CommandDocBitBtnClick) then begin
  112. if SignToolCommand = '' then begin
  113. AppMessageBox(PChar('Invalid command.'), PChar(Caption), MB_OK or MB_ICONSTOP);
  114. Exit;
  115. end;
  116. end;
  117. Result := True;
  118. end;
  119. end;
  120. procedure TSignToolsForm.AddButtonClick(Sender: TObject);
  121. var
  122. SignToolName, SignToolCommand: String;
  123. begin
  124. SignToolName := '';
  125. SignToolCommand := '';
  126. if InputSignTool(SignToolName, SignToolCommand, -1) then begin
  127. FSignTools.Add(SignToolName + '=' + SignToolCommand);
  128. UpdateSignTools;
  129. UpdateSignToolsButtons;
  130. end;
  131. end;
  132. procedure TSignToolsForm.EditButtonClick(Sender: TObject);
  133. var
  134. SignToolName, SignToolCommand: String;
  135. I, P: Integer;
  136. begin
  137. I := SignToolsListBox.ItemIndex;
  138. P := Pos('=', FSignTools[I]);
  139. if P = 0 then
  140. raise Exception.Create('Internal error: ''='' not found in SignTool');
  141. SignToolName := Copy(FSignTools[I], 1, P-1);
  142. SignToolCommand := Copy(FSignTools[I], P+1, MaxInt);
  143. if InputSignTool(SignToolName, SignToolCommand, I) then begin
  144. FSignTools[I] := SignToolName + '=' + SignToolCommand;
  145. UpdateSignTools;
  146. UpdateSignToolsButtons;
  147. end;
  148. end;
  149. procedure TSignToolsForm.RemoveButtonClick(Sender: TObject);
  150. var
  151. I: Integer;
  152. begin
  153. I := SignToolsListBox.ItemIndex;
  154. FSignTools.Delete(I);
  155. UpdateSignTools;
  156. UpdateSignToolsButtons;
  157. end;
  158. procedure TSignToolsForm.SignToolsListBoxClick(Sender: TObject);
  159. begin
  160. UpdateSignToolsButtons;
  161. end;
  162. procedure TSignToolsForm.SignToolsListBoxDblClick(Sender: TObject);
  163. begin
  164. if EditButton.Enabled then
  165. EditButton.Click;
  166. end;
  167. end.