unit U_CadNormsProp;

interface

uses
  Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit,
  StdCtrls, ExtCtrls, RzPanel, cxLookAndFeelPainters, cxButtons, U_ESCadClasess,
  cxRadioGroup, cxCheckBox, siComp, siLngLnk, RzButton, RzRadChk, cxGraphics,
  cxLookAndFeels, Menus;

type
  TF_CadNormsProp = class(TForm)
    gbFieldsWidth: TRzGroupBox;
    lb1: TLabel;
    Label1: TLabel;
    edNumberSize: TcxMaskEdit;
    lb2: TLabel;
    lb3: TLabel;
    lb4: TLabel;
    lb5: TLabel;
    Label6: TLabel;
    edNameSize: TcxMaskEdit;
    edIzmSize: TcxMaskEdit;
    edCountSize: TcxMaskEdit;
    edColumnsSize: TcxMaskEdit;
    edLineHeight: TcxMaskEdit;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    RzGroupBox1: TRzGroupBox;
    Label14: TLabel;
    edTextSize: TcxMaskEdit;
    bCancel: TcxButton;
    bOK: TcxButton;
    RzGroupBox2: TRzGroupBox;
    Label13: TLabel;
    edTableWidth: TcxMaskEdit;
    Bevel1: TBevel;
    lng_Forms: TsiLangLinked;
    rbBold: TRzCheckBox;
    rbItalic: TRzCheckBox;
    rbUnderline: TRzCheckBox;
    rbStrikeOut: TRzCheckBox;
    procedure bCancelClick(Sender: TObject);
    procedure bOKClick(Sender: TObject);
    procedure edNumberSizeKeyPress(Sender: TObject; var Key: Char);
    procedure edTableWidthKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function Execute(aCadNormsObject: TCadNorms): Boolean;
  end;

var
  F_CadNormsProp: TF_CadNormsProp;

implementation
uses U_BaseCommon, U_SCSComponent, U_Common, U_Constants;

{$R *.dfm}

procedure TF_CadNormsProp.bCancelClick(Sender: TObject);
begin
  Close;
end;

function TF_CadNormsProp.Execute(aCadNormsObject: TCadNorms): Boolean;
var
  DblValue: Double;
  IntValue: Integer;
  SetValue: TFontStyles;
begin
  try
    // MaskEdit
    edNumberSize.Properties.EditMask := '\d?\d?\d?' + DecimalSeparator + '\d?\d?';
    edNameSize.Properties.EditMask := '\d?\d?\d?' + DecimalSeparator + '\d?\d?';
    edIzmSize.Properties.EditMask := '\d?\d?\d?' + DecimalSeparator + '\d?\d?';
    edCountSize.Properties.EditMask := '\d?\d?\d?' + DecimalSeparator + '\d?\d?';
    edColumnsSize.Properties.EditMask := '\d?\d?\d?' + DecimalSeparator + '\d?\d?';
    edLineHeight.Properties.EditMask := '\d?\d?\d?' + DecimalSeparator + '\d?\d?';
    edTextSize.Properties.EditMask := '\d?\d?' + DecimalSeparator + '\d?\d?';

    lb1.Caption := cCadNormsProp_Mes6 + cCadNormsProp_Mes1;
    lb2.Caption := cCadNormsProp_Mes6 + cCadNormsProp_Mes2;
    lb3.Caption := cCadNormsProp_Mes6 + cCadNormsProp_Mes3;
    lb4.Caption := cCadNormsProp_Mes6 + cCadNormsProp_Mes4;
    lb5.Caption := cCadNormsProp_Mes6 + cCadNormsProp_Mes5;

    Result := False;
    if (GCurrProjUnitOfMeasure = umSM) or (GCurrProjUnitOfMeasure = umM) then
    begin
      edNumberSize.Text :=  FormatFloat(ffMask, aCadNormsObject.fNumberSize);
      edNameSize.Text := FormatFloat(ffMask, aCadNormsObject.fNameSize);
      edIzmSize.Text := FormatFloat(ffMask, aCadNormsObject.fIzmSize);
      edCountSize.Text := FormatFloat(ffMask, aCadNormsObject.fCountSize);
      edColumnsSize.Text := FormatFloat(ffMask, aCadNormsObject.fColumnSize);
      edLineHeight.Text := FormatFloat(ffMask, aCadNormsObject.fLineHeight);
    end
    else
    if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
    begin
      edNumberSize.Text := FormatFloat(ffMask, FloatInUOM(aCadNormsObject.fNumberSize, umMM, umIn));
      edNameSize.Text := FormatFloat(ffMask, FloatInUOM(aCadNormsObject.fNameSize, umMM, umIn));
      edIzmSize.Text := FormatFloat(ffMask, FloatInUOM(aCadNormsObject.fIzmSize, umMM, umIn));
      edCountSize.Text := FormatFloat(ffMask, FloatInUOM(aCadNormsObject.fCountSize, umMM, umIn));
      edColumnsSize.Text := FormatFloat(ffMask, FloatInUOM(aCadNormsObject.fColumnSize, umMM, umIn));
      edLineHeight.Text := FormatFloat(ffMask, FloatInUOM(aCadNormsObject.fLineHeight, umMM, umIn));
    end;

    edTableWidth.Text := IntToStr(aCadNormsObject.fTableWidth);
    edTextSize.Text := IntToStr(aCadNormsObject.fTextSize);

    // стиль текста
    rbBold.Checked := False;
    rbItalic.Checked := False;
    rbUnderline.Checked := False;
    rbStrikeOut.Checked := False;
    if fsBold in aCadNormsObject.fTextStyle then
      rbBold.Checked := True;
    if fsItalic in aCadNormsObject.fTextStyle then
      rbItalic.Checked := True;
    if fsUnderline in aCadNormsObject.fTextStyle then
      rbUnderline.Checked := True;
    if fsStrikeOut in aCadNormsObject.fTextStyle then
      rbStrikeOut.Checked := True;

    if ShowModal = mrOK then
    begin
      DblValue := StrToFloat_My(edNumberSize.Text);
      if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
        DblValue := FloatInUOM(DblValue, umIn, umMM);
      if not DoubleCMP(DblValue, aCadNormsObject.fNumberSize) then
      begin
        aCadNormsObject.fNumberSize := DblValue;
        Result := True;
      end;
      DblValue := StrToFloat_My(edNameSize.Text);
      if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
        DblValue := FloatInUOM(DblValue, umIn, umMM);
      if not DoubleCMP(DblValue, aCadNormsObject.fNameSize) then
      begin
        aCadNormsObject.fNameSize := DblValue;
        Result := True;
      end;
      DblValue := StrToFloat_My(edIzmSize.Text);
      if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
        DblValue := FloatInUOM(DblValue, umIn, umMM);
      if not DoubleCMP(DblValue, aCadNormsObject.fIzmSize) then
      begin
        aCadNormsObject.fIzmSize := DblValue;
        Result := True;
      end;
      DblValue := StrToFloat_My(edCountSize.Text);
      if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
        DblValue := FloatInUOM(DblValue, umIn, umMM);
      if not DoubleCMP(DblValue, aCadNormsObject.fCountSize) then
      begin
        aCadNormsObject.fCountSize := DblValue;
        Result := True;
      end;
      DblValue := StrToFloat_My(edColumnsSize.Text);
      if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
        DblValue := FloatInUOM(DblValue, umIn, umMM);
      if not DoubleCMP(DblValue, aCadNormsObject.fColumnSize) then
      begin
        aCadNormsObject.fColumnSize := DblValue;
        Result := True;
      end;
      DblValue := StrToFloat_My(edLineHeight.Text);
      if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
        DblValue := FloatInUOM(DblValue, umIn, umMM);
      if not DoubleCMP(DblValue, aCadNormsObject.fLineHeight) then
      begin
        aCadNormsObject.fLineHeight := DblValue;
        Result := True;
      end;
      IntValue := StrToInt(edTableWidth.Text);
      if IntValue <> aCadNormsObject.fTableWidth then
      begin
        aCadNormsObject.fTableWidth := IntValue;
        Result := True;
      end;
      IntValue := StrToInt(edTextSize.Text);
      if IntValue <> aCadNormsObject.fTextSize then
      begin
        aCadNormsObject.fTextSize := IntValue;
        Result := True; 
      end;
      // стиль текста
      SetValue := [];
      if rbBold.Checked then
        SetValue := SetValue + [fsBold];
      if rbItalic.Checked then
        SetValue := SetValue + [fsItalic];
      if rbUnderline.Checked then
        SetValue := SetValue + [fsUnderline];
      if rbStrikeOut.Checked then
        SetValue := SetValue + [fsStrikeOut];
      if SetValue <> aCadNormsObject.fTextStyle then
      begin
        aCadNormsObject.fTextStyle := SetValue;
        Result := True;
      end;
    end;
  except
    on E: Exception do AddExceptionToLogEx('TF_CadNormsProp.Execute', E.Message);
  end;
end;

procedure TF_CadNormsProp.bOKClick(Sender: TObject);
begin
  try
    if not GProjectChanged then // Tolik 28/08/2019 --
      SetProjectChanged(True);
  except
    on E: Exception do AddExceptionToLogEx('TF_CadNormsProp.bOKClick', E.Message);
  end;
end;

procedure TF_CadNormsProp.edNumberSizeKeyPress(Sender: TObject;
  var Key: Char);
begin
  try
    if (Key = '.') or (Key = ',') then
      if Key <> DecimalSeparator then
        Key := #0;

    if Key = #13 then
    begin
      bOK.SetFocus;
      bOK.Click;
    end;
  except
    on E: Exception do AddExceptionToLogEx('TF_CadNormsProp.edNumberSizeKeyPress', E.Message);
  end;
end;

procedure TF_CadNormsProp.edTableWidthKeyPress(Sender: TObject;
  var Key: Char);
begin
  try
    if Key = #13 then
    begin
      bOK.SetFocus;
      bOK.Click;
    end;
  except
    on E: Exception do AddExceptionToLogEx('TF_CadNormsProp.edTableWidthKeyPress', E.Message);
  end;
end;

procedure TF_CadNormsProp.FormShow(Sender: TObject);
begin
  try
    // система измерений
    if (GCurrProjUnitOfMeasure = umSM) or (GCurrProjUnitOfMeasure = umM) then
    begin
      Label1.Caption := cMetric_mm;
      Label8.Caption := cMetric_mm;
      Label9.Caption := cMetric_mm;
      Label10.Caption := cMetric_mm;
      Label11.Caption := cMetric_mm;
      Label12.Caption := cMetric_mm;
    end;
    if (GCurrProjUnitOfMeasure = umIn) or (GCurrProjUnitOfMeasure = umFt) then
    begin
      Label1.Caption := cWhitworth_in;
      Label8.Caption := cWhitworth_in;
      Label9.Caption := cWhitworth_in;
      Label10.Caption := cWhitworth_in;
      Label11.Caption := cWhitworth_in;
      Label12.Caption := cWhitworth_in;
    end;
  except
    on E: Exception do AddExceptionToLogEx('TF_CadNormsProp.FormShow', E.Message);
  end;
end;

end.
