unit ConnectionUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask;

type
  TConnectionForm = class(TForm)
    NickLabel: TLabel;
    NickEdit: TEdit;
    ConnectionRadioGroup: TRadioGroup;
    ServerRadioButton: TRadioButton;
    ClientRadioButton: TRadioButton;
    OKButton: TButton;
    CancelButton: TButton;
    IPEdit: TEdit;
    IPLabel: TLabel;
    PortLabel: TLabel;
    PortEdit: TMaskEdit;
    procedure FormShow(Sender: TObject);
    procedure ServerRadioButtonClick(Sender: TObject);
    procedure ClientRadioButtonClick(Sender: TObject);
    procedure NickEditExit(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure IPEditChange(Sender: TObject);
    procedure PortEditExit(Sender: TObject);
  public
    function GetPort: word;
    constructor Create(Owner: TComponent); reintroduce;
  end;

implementation

{$R *.dfm}

uses
  GlobalsLocalUnit;

procedure TConnectionForm.ServerRadioButtonClick(Sender: TObject);
begin
  IPEdit.Enabled := FALSE;
  OKButton.Enabled := TRUE;
end;

procedure TConnectionForm.FormShow(Sender: TObject);
var
  frmOwner: TForm;
begin
  frmOwner := (Owner as TForm);
  Left:= frmOwner.Left + (frmOwner.Width - Width) div 2;
  Top:= frmOwner.Top + (frmOwner.Height - Height) div 2;
end;

procedure TConnectionForm.ClientRadioButtonClick(Sender: TObject);
begin
  IPEdit.Enabled:= TRUE;
  if IPEdit.Text <> '' then OKButton.Enabled:= TRUE
    else OKButton.Enabled:= FALSE;
end;

procedure TConnectionForm.PortEditExit(Sender: TObject);
begin
  PortEdit.Text := IntToStr(GetPort);
end;

procedure TConnectionForm.NickEditExit(Sender: TObject);
begin
  if NickEdit.Text = '' then NickEdit.Text:= 'NN';
end;

procedure TConnectionForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then ModalResult:= mrOk;
end;

procedure TConnectionForm.IPEditChange(Sender: TObject);
begin
  if IPEdit.Text <> '' then OKButton.Enabled:= TRUE
    else OKButton.Enabled:= FALSE;
end;

constructor TConnectionForm.Create(Owner: TComponent);
begin
  FormStyle := (Owner as TForm).FormStyle;
  inherited;
  PortEdit.Text := IntToStr(DEFAULT_PORT);
end;

function TConnectionForm.GetPort: word;
var
  port: integer;
begin
  try
    port := StrToInt(Trim(PortEdit.Text));
    if (port > 0) and (port <= $FFFF) then
      Result := port
    else
      Result := DEFAULT_PORT
  except
    on EConvertError do
      Result := DEFAULT_PORT;
  end;
end;

end.