unit kavesimf;
{
   Tässä tiedostossa on simulaattorin TaSimuObject:in editointilomake

   Author:  Vesa Lappalainen
   Date:    18.3.1998
   Changes:

}

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls,kdouble,kpoint,kbox,kscale,kinicomp, StdCtrls, kComp, KParam,
  savepos, kavesimu, IvMulti, IvEMulti, ktrans, IvDictio;

type

  TFormEditSimuObject = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    ButtonOK: TButton;
    ParamPX: TkParam;
    ParamOrigoY: TkParam;
    ParamOrigoX: TkParam;
    ParamDpY: TkParam;
    ParamDpX: TkParam;
    ParamPY: TkParam;
    SavePos1: TSavePos;
    ButtonCancel: TButton;
    CBAutoApply: TkCheckBox;
    ColorDialog: TColorDialog;
    Panel5: TPanel;
    ButtonColor: TButton;
    PanelColor: TPanel;
    rgRefX: TRadioGroup;
    rgRefY: TRadioGroup;
    Translator: TkTranslator;
    procedure ParamPXAfterChange(Sender: TObject; var val: Double);
    procedure CBAutoApplyClick(Sender: TObject);
    procedure ButtonColorClick(Sender: TObject);
    procedure rgRefXClick(Sender: TObject);
    procedure ButtonCancelClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  protected
    FGetting : boolean;
    FMyObj : TaSimuObject;
    procedure SetCol(c:TColor); virtual;
  public
    { Public declarations }
    procedure GetData(const o:TaSimuObject); virtual;
    procedure SetData(o:TaSimuObject); virtual;
    procedure CheckSet; virtual;
    property Getting : boolean read FGetting write FGetting;
    property MyObj : TaSimuObject read FMyobj write FMyobj;
  end;

var
  FormEditSimuObject: TFormEditSimuObject;

{------------------------------------------------------------------------------}
implementation
{$R *.DFM}


//-----------------------------------------------------------------------------
// TFormEditSimuObject
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
procedure TFormEditSimuObject.GetData(const o:TaSimuObject); //  virtual;
var olda : boolean;
begin
  olda := CBAutoApply.Checked;
  CBAutoApply.Checked := false;
  with o do begin
    ParamPX.value := box.p.x;
    ParamPY.value := box.p.y;
    ParamDpX.value := box.dp.x;
    ParamDpY.value := box.dp.y;
    ParamOrigoX.value := box.Origo.x;
    ParamOrigoY.value := box.Origo.y;
    SetCol(Brush.Color);
    rgRefX.ItemIndex := Ord(box.OrigoRefX);
    rgRefY.ItemIndex := Ord(box.OrigoRefY);
  end;
  CBAutoApply.Checked := olda;
end;


//-----------------------------------------------------------------------------
procedure TFormEditSimuObject.SetData(o:TaSimuObject); //  virtual;
var oldInfo : boolean;
begin
  with o do begin
    oldInfo := box.DoInform; box.DoInform := false;
    box.p.x := ParamPX.value;
    box.p.y := ParamPY.value;
    box.dp.x := ParamDpX.value;
    box.dp.y := ParamDpY.value;
    box.Origo.x := ParamOrigoX.value;
    box.Origo.y := ParamOrigoY.value;
    box.DoInform := oldInfo;
    box.OrigoRefX := TLinkDirX(rgRefX.ItemIndex);
    box.OrigoRefY := TLinkDirY(rgRefY.ItemIndex);
    box.PChange(nil);
    Brush.Color := PanelColor.Color;
  end;
end;

procedure TFormEditSimuObject.ParamPXAfterChange(Sender: TObject;
  var val: Double);
begin
  CheckSet;
end;

procedure TFormEditSimuObject.CBAutoApplyClick(Sender: TObject);
begin
  CheckSet;
end;

procedure TFormEditSimuObject.ButtonColorClick(Sender: TObject);
begin
  ColorDialog.Color := PanelColor.Color;
  if not ColorDialog.Execute then exit;
  SetCol(ColorDialog.Color);
  CheckSet;
end;


//-----------------------------------------------------------------------------
procedure TFormEditSimuObject.SetCol(c:TColor); //  virtual;
begin
  PanelColor.Color := c;
  PanelColor.Caption := IntToHex(c,6);
end;


//-----------------------------------------------------------------------------
procedure TFormEditSimuObject.CheckSet; //  virtual;
begin
  if ( csLoading in ComponentState ) or  ( FGetting ) then exit;
  if ( CBAutoApply.Checked ) then SetData(fmyobj);
  if Assigned(MyObj.OnAfterChange) then MyObj.OnAfterChange(MyObj);
end;

procedure TFormEditSimuObject.rgRefXClick(Sender: TObject);
begin
  CheckSet;
end;

procedure TFormEditSimuObject.ButtonCancelClick(Sender: TObject);
begin
  Close;
end;

procedure TFormEditSimuObject.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if not assigned(MyObj.Form) then exit;
  MyObj.Form := nil;
  Release;
end;

end.







