unit MainForm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ExtCtrls;

type

  { TFormMain }

  TFormMain = class(TForm)
    ButtonVypocet: TButton;
    GroupBoxA: TGroupBox;
    GroupBoxB: TGroupBox;
    GroupBoxVysledek: TGroupBox;
    LabeledEditAx: TLabeledEdit;
    LabeledEditBx: TLabeledEdit;
    LabeledEditAy: TLabeledEdit;
    LabeledEditVysledekx: TLabeledEdit;
    LabeledEditBy: TLabeledEdit;
    LabeledEditVysledeky: TLabeledEdit;
    RadioGroupOperace: TRadioGroup;
    RadioGroupA: TRadioGroup;
    RadioGroupB: TRadioGroup;
    RadioGroupVysledek: TRadioGroup;
    procedure ButtonVypocetClick(Sender: TObject);
    procedure NactiCisla(sender:TObject);
    procedure Vypocitej(sender:TObject);
    procedure VypisVysledek(sender:TObject);
    procedure PrevodTvaru(Sender:TObject);
    function Float2Str(Value:Double):String;
  private
    ARe,AIm,BRe,BIm,VyslRe,VyslIm: Real;
  end;

var
  FormMain: TFormMain;

implementation

uses unit_funkce;

function TFormMain.Float2Str(Value:Double):String;
begin
  result := FloatToStrF(Value,ffFixed,5,7);
end;

procedure TFormMain.NactiCisla(sender:TObject);
var Ax,Ay,Bx,By:real;
    Aktivni:TLabeledEdit;
begin
  {načtu data}
  try
    Aktivni:=LabeledEditAx;
    Ax:=StrToFloat(LabeledEditAx.Text);
    Aktivni:=LabeledEditAy;
    Ay:=StrToFloat(LabeledEditAy.Text);
    Aktivni:=LabeledEditBx;
    Bx:=StrToFloat(LabeledEditBx.Text);
    Aktivni:=LabeledEditBy;
    By:=StrToFloat(LabeledEditBy.Text);
  except
    ShowMessage('Zadej korektní číselnou hodnotu');
    Aktivni.SetFocus;
    Aktivni.SelectAll;
  end;
  {převedu data do složkového tvaru}
  if RadioGroupA.ItemIndex = 0 then begin
    ARe:= Ax;
    AIm:= Ay;
  end else begin
    exp2slo(Ax,Ay,ARe,AIm);
  end;
  if RadioGroupB.ItemIndex = 0 then begin
    BRe:= Bx;
    BIm:= By;
  end else begin
    exp2slo(Bx,By,BRe,BIm);
  end;
end;



procedure TFormMain.Vypocitej(sender:TObject);
begin
  NactiCisla(Sender);
  case RadioGroupOperace.ItemIndex of
    0: begin // +
         VyslRe:=ARe+BRe;
         VyslIm:=AIm+BIm;
       end;
    1: begin // -
         VyslRe:=ARe-BRe;
         VyslIm:=AIm-BIm;
       end;
    2: begin // *
         VyslRe:=ARe*BRe - AIm*BIm;
         VyslIm:=AIm*BRe + ARe*BIm;
       end;
    3: begin // /
         VyslRe:=( ARe*BRe + AIm*BIm ) / ( BRe*BRe + BIm*BIm );
         VyslIm:=( AIm*BRe - ARe*BIm ) / ( BRe*BRe + BIm*BIm );
       end;
  end;
end;

procedure TFormMain.VypisVysledek(sender:TObject);
var abs,uhel:real;
begin
  if RadioGroupVysledek.ItemIndex = 0 then begin
    LabeledEditVysledekx.Caption:= Float2Str(VyslRe);
    LabeledEditVysledeky.Caption:= Float2Str(VyslIm);
  end else begin
    slo2exp(VyslRe,VyslIm,abs,uhel);
    LabeledEditVysledekx.Caption:= Float2Str(abs);
    LabeledEditVysledeky.Caption:= Float2Str(uhel);
  end;
end;

procedure TFormMain.PrevodTvaru(Sender:TObject);
var protejsekX,protejsekY,aktivni:TLabeledEdit;
    zadanoX,zadanoY,prevedenoX,prevedenoY:real;
begin
    {spojeni prepinace tvaru a zobrazeni cisla}
    if Sender=RadioGroupA then begin
      protejsekX:=LabeledEditAx;
      protejsekY:=LabeledEditAy;
    end;
    if Sender=RadioGroupB then begin
      protejsekX:=LabeledEditBx;
      protejsekY:=LabeledEditBy;
    end;
    if Sender=RadioGroupVysledek then begin
      protejsekX:=LabeledEditVysledekx;
      protejsekY:=LabeledEditVysledeky;
    end;
    {převod}
    if (Sender as TRadioGroup).ItemIndex = 0 then begin
       protejsekX.EditLabel.Caption:='Re';
       protejsekY.EditLabel.Caption:='Im';
    end else begin
       protejsekX.EditLabel.Caption:='Abs';
       protejsekY.EditLabel.Caption:='Uhel';
    end;
    try
      aktivni:=protejsekX;
      zadanoX:=StrToFloat(protejsekX.Text);
      aktivni:=protejsekY;
      zadanoY:=StrToFloat(protejsekY.Text);
      case (Sender as TRadioGroup).ItemIndex of
        0:exp2slo(zadanoX,zadanoY,prevedenoX,prevedenoY);
        1:slo2exp(zadanoX,zadanoY,prevedenoX,prevedenoY);
      end;
      protejsekX.Text:= Float2Str(prevedenoX);
      protejsekY.Text:= Float2Str(prevedenoY);
    except
      aktivni.SetFocus;
      aktivni.SelectAll;
    end;

end;

procedure TFormMain.ButtonVypocetClick(Sender: TObject);
begin
   Vypocitej(Sender);
   VypisVysledek(Sender);
end;



initialization
  {$I mainform.lrs}



end.