Inno-Setup-issrc/Projects/Src/IDE.SignToolsForm.pas
2024-08-09 15:09:18 +02:00

196 lines
5.3 KiB
ObjectPascal

unit IDE.SignToolsForm;
{
Inno Setup
Copyright (C) 1997-2020 Jordan Russell
Portions by Martijn Laan
For conditions of distribution and use, see LICENSE.TXT.
Compiler IDE SignTools form
}
interface
uses
Classes, Controls, StdCtrls, UIStateForm;
type
TSignToolsForm = class(TUIStateForm)
OKButton: TButton;
CancelButton: TButton;
GroupBox1: TGroupBox;
SignToolsListBox: TListBox;
AddButton: TButton;
RemoveButton: TButton;
EditButton: TButton;
procedure SignToolsListBoxClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure AddButtonClick(Sender: TObject);
procedure RemoveButtonClick(Sender: TObject);
procedure EditButtonClick(Sender: TObject);
procedure SignToolsListBoxDblClick(Sender: TObject);
private
FSignTools: TStringList;
procedure CommandDocImageClick(Sender: TObject);
procedure UpdateSignTools;
procedure UpdateSignToolsButtons;
procedure SetSignTools(SignTools: TStringList);
function InputSignTool(var SignToolName, SignToolCommand: String;
ExistingIndex: Integer): Boolean;
protected
procedure CreateWnd; override;
procedure CreateParams(var Params: TCreateParams); override;
public
property SignTools: TStringList read FSignTools write SetSignTools;
end;
implementation
uses
Windows, Messages, SysUtils, Dialogs,
Shared.CommonFunc.Vcl, IDE.InputQueryMemoForm, IDE.HelperFunc,
IDE.HtmlHelpFunc;
{$R *.DFM}
procedure TSignToolsForm.UpdateSignTools;
begin
SignToolsListBox.Items.Assign(FSignTools);
UpdateHorizontalExtent(SignToolsListBox);
end;
procedure TSignToolsForm.UpdateSignToolsButtons;
var
Enabled: Boolean;
begin
Enabled := SignToolsListBox.ItemIndex >= 0;
EditButton.Enabled := Enabled;
RemoveButton.Enabled := Enabled;
end;
procedure TSignToolsForm.SetSignTools(SignTools: TStringList);
begin
FSignTools.Assign(SignTools);
UpdateSignTools;
UpdateSignToolsButtons;
end;
procedure TSignToolsForm.FormCreate(Sender: TObject);
begin
FSignTools := TStringList.Create();
InitFormFont(Self);
end;
{ This and CreateParams make bsSizeable (which has an unwanted icon) look like bsDialog, see:
https://stackoverflow.com/questions/32096482/delphi-resizable-bsdialog-form/32098633 }
procedure TSignToolsForm.CreateWnd;
begin
inherited;
SendMessage(Handle, WM_SETICON, ICON_BIG, 0);
end;
procedure TSignToolsForm.CommandDocImageClick(Sender: TObject);
begin
if Assigned(HtmlHelp) then
HtmlHelp(GetDesktopWindow, PChar(GetHelpFile), HH_DISPLAY_TOPIC, Cardinal(PChar('topic_setup_signtool.htm')));
end;
procedure TSignToolsForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE;
end;
procedure TSignToolsForm.FormDestroy(Sender: TObject);
begin
FSignTools.Free();
end;
function TSignToolsForm.InputSignTool(var SignToolName, SignToolCommand: String;
ExistingIndex: Integer): Boolean;
var
I: Integer;
begin
Result := False;
if InputQuery(Caption, 'Name of the Sign Tool:', SignToolName) then begin
if (SignToolName = '') or (Pos('=', SignToolName) <> 0) then begin
AppMessageBox(PChar('Invalid name.'), PChar(Caption), MB_OK or MB_ICONSTOP);
Exit;
end;
for I := 0 to FSignTools.Count-1 do begin
if (I <> ExistingIndex) and (Pos(SignToolName + '=', FSignTools[I]) = 1) then begin
AppMessageBox(PChar('Duplicate name.'), PChar(Caption), MB_OK or MB_ICONSTOP);
Exit;
end;
end;
if InputQueryMemo(Caption, 'Command of the Sign Tool:', SignToolCommand, True, CommandDocImageClick) then begin
if SignToolCommand = '' then begin
AppMessageBox(PChar('Invalid command.'), PChar(Caption), MB_OK or MB_ICONSTOP);
Exit;
end;
end;
Result := True;
end;
end;
procedure TSignToolsForm.AddButtonClick(Sender: TObject);
var
SignToolName, SignToolCommand: String;
begin
SignToolName := '';
SignToolCommand := '';
if InputSignTool(SignToolName, SignToolCommand, -1) then begin
FSignTools.Add(SignToolName + '=' + SignToolCommand);
UpdateSignTools;
UpdateSignToolsButtons;
end;
end;
procedure TSignToolsForm.EditButtonClick(Sender: TObject);
var
SignToolName, SignToolCommand: String;
I, P: Integer;
begin
I := SignToolsListBox.ItemIndex;
P := Pos('=', FSignTools[I]);
if P = 0 then
raise Exception.Create('Internal error: ''='' not found in SignTool');
SignToolName := Copy(FSignTools[I], 1, P-1);
SignToolCommand := Copy(FSignTools[I], P+1, MaxInt);
if InputSignTool(SignToolName, SignToolCommand, I) then begin
FSignTools[I] := SignToolName + '=' + SignToolCommand;
UpdateSignTools;
UpdateSignToolsButtons;
end;
end;
procedure TSignToolsForm.RemoveButtonClick(Sender: TObject);
var
I: Integer;
begin
I := SignToolsListBox.ItemIndex;
FSignTools.Delete(I);
UpdateSignTools;
UpdateSignToolsButtons;
end;
procedure TSignToolsForm.SignToolsListBoxClick(Sender: TObject);
begin
UpdateSignToolsButtons;
end;
procedure TSignToolsForm.SignToolsListBoxDblClick(Sender: TObject);
begin
if EditButton.Enabled then
EditButton.Click;
end;
end.