196 lines
5.3 KiB
ObjectPascal
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.
|