unit U_AutoTraceConnectOrder;

interface

uses
  Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxLookAndFeelPainters, StdCtrls, cxRadioGroup, cxButtons,
  ExtCtrls, RzPanel, siComp, siLngLnk,

  U_BaseCommon, U_Constants, cxControls, cxContainer, cxEdit, cxCheckBox, RzButton,
  RzRadChk, U_SCSComponent, Mask, RzEdit, Math, RzRadGrp, cxGraphics,
  cxLookAndFeels, Menus;

type
  TTracingFiguresInfo = record
    RackCount: Integer;
    BoxCount: Integer;
    WACount: Integer;
    RackPortCount, BoxPortCount, WAPortCount: Integer;
  end;
  PTracingFiguresInfo = ^TTracingFiguresInfo;

  TF_AutoTraceConnectOrder = class(TForm)
    RzGroupBox1: TRzGroupBox;
    bOK: TcxButton;
    bCancel: TcxButton;
    pnNumPanelWithNumPortExample: TRzPanel;
    pnNumPanelWithNumPort: TRzPanel;
    pnByOrderInPMExample: TRzPanel;
    pnByOrderInPM: TRzPanel;
    rbByOrderInPM: TcxRadioButton;
    rbNumPanelWithNumPort: TcxRadioButton;
    lbByOrderInPMExample: TLabel;
    lbNumPanelWithNumPortExample: TLabel;
    Label1: TLabel;
    lng_Forms: TsiLangLinked;
    cbNoAskParams: TRzCheckBox;
    pnMain: TPanel;
    pnBottom: TPanel;
    pnNewComponIndex: TPanel;
    lbTracingFigInfo: TLabel;
    RzGroupBox3: TRzGroupBox;
    rbTraceManualCable: TcxRadioButton;
    rbConnectByInterface: TcxRadioButton;
    neCableTraceCount: TRzNumericEdit;
    RzGroupBox2: TRzGroupBox;
    rbOnePortToOne: TcxRadioButton;
    rbOnePortOrMoreToOne: TcxRadioButton;
    StreakConnect: TCheckBox;
    RzRadioGroup1: TRzRadioGroup;
    ProjArea: TRzRadioButton;
    ListArea: TRzRadioButton;
    BeginFrom: TRzRadioButton;
    neNewComponIndex: TRzNumericEdit;
    cbAutoTraceByIndexes: TRzCheckBox;
    procedure FormShow(Sender: TObject);
    procedure rbByOrderInPMClick(Sender: TObject);
    procedure rbNumPanelWithNumPortClick(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure rbTraceManualCableClick(Sender: TObject);
    procedure BeginFromClick(Sender: TObject);
    procedure ProjAreaClick(Sender: TObject);
    procedure ListAreaClick(Sender: TObject);
  private
    procedure SetControls;
  public
    function Execute(AProjectSetting: PProjectSettingRecord; ATraceCompon: TSCSComponent; aTracingFigInfo: PTracingFiguresInfo=nil): Boolean;
  end;

var
  F_AutoTraceConnectOrder: TF_AutoTraceConnectOrder;

implementation
Uses U_Main;

{$R *.dfm}


{ TF_AutoTraceConnectOrder }

procedure TF_AutoTraceConnectOrder.SetControls;
begin
  //lbByOrderInPMExample.Visible := rbByOrderInPM.Checked;
  //lbNumPanelWithNumPortExample.Visible := rbNumPanelWithNumPort.Checked;
//  pnByOrderInPMExample.Visible := rbByOrderInPM.Checked;
//  pnNumPanelWithNumPortExample.Visible := rbNumPanelWithNumPort.Checked;
end;

procedure TF_AutoTraceConnectOrder.FormShow(Sender: TObject);
begin
  SetControls;
  {$IF Defined(SCS_PE)}
    neCableTraceCount.Left := 77;
  {$ELSE}
    neCableTraceCount.Left := 108;
  {$IFEND}
end;

procedure TF_AutoTraceConnectOrder.rbByOrderInPMClick(Sender: TObject);
begin
  rbNumPanelWithNumPort.Checked := false;
  SetControls;
end;

procedure TF_AutoTraceConnectOrder.rbNumPanelWithNumPortClick(
  Sender: TObject);
begin
  rbByOrderInPM.Checked := false;
  SetControls;
end;

procedure TF_AutoTraceConnectOrder.Label1Click(Sender: TObject);
begin
  rbNumPanelWithNumPort.Checked := true;
  rbNumPanelWithNumPortClick(rbNumPanelWithNumPort);
end;

function TF_AutoTraceConnectOrder.Execute(AProjectSetting: PProjectSettingRecord; ATraceCompon: TSCSComponent; aTracingFigInfo: PTracingFiguresInfo): Boolean;
var
  SprCompType: TNBComponentType;
  MinCnt: Integer;
begin
  Result := false;

  if AProjectSetting <> nil then
  begin
    if AProjectSetting.TraceConnectOrder = ctPMOrder then
      rbByOrderInPM.Checked := true
    else
    if AProjectSetting.TraceConnectOrder = ctNumPanelWithNumPort then
      rbNumPanelWithNumPort.Checked := true;

    if AProjectSetting.TraceOnePortToOne then
      rbOnePortToOne.Checked := true
    else
      rbOnePortOrMoreToOne.Checked := true;

    cbNoAskParams.Checked := AProjectSetting.TraceNoAskParams;

    SprCompType := nil;
    if ATraceCompon <> nil then
      SprCompType := F_ProjMan.GSCSBase.CurrProject.Spravochnik.GetComponentTypeWithAssign(ATraceCompon.GUIDComponentType, F_NormBase.GSCSBase.NBSpravochnik);

    pnNewComponIndex.Visible := SprCompType <> nil;
    //Tolik
    if SprCompType <> nil then
      begin
        case SprCompType.ComponentType.ComponentIndex of
        -2 :
          begin
            ProjArea.Checked := true;
            neNewComponIndex.IntValue := 1;
            neNewComponIndex.Enabled := false;
          end;
        -3 :
          begin
            ListArea.Checked := true;
            neNewComponIndex.IntValue := 1;
            neNewComponIndex.Enabled := false;
          end;
        else
        begin
          BeginFrom.Checked := true;
          neNewComponIndex.IntValue := SprCompType.ComponentType.ComponentIndex+1;
          neNewComponIndex.Enabled := true;
        end;
        end;
       //
      end;


    //05.07.2013
    if aTracingFigInfo <> nil then
    begin
      lbTracingFigInfo.Caption := '';
      if aTracingFigInfo^.WAPortCount > 0 then
        lbTracingFigInfo.Caption := IntToStr(aTracingFigInfo^.WAPortCount) + ' '+cCommon_Mes28_1;
      MinCnt := Min(aTracingFigInfo^.RackPortCount, aTracingFigInfo^.BoxPortCount);
      if MinCnt > 0 then
      begin
        if lbTracingFigInfo.Caption <> '' then
          lbTracingFigInfo.Caption := lbTracingFigInfo.Caption + ', ';
        lbTracingFigInfo.Caption := lbTracingFigInfo.Caption + IntToStr(MinCnt) + ' '+cCommon_Mes28_2;
      end;
      lbTracingFigInfo.Visible := lbTracingFigInfo.Caption <> '';
    end
    else
      lbTracingFigInfo.Visible := false;


    Self.AutoSize := false;
    Self.AutoSize := true;

    if ShowModal = mrOk then
    begin
      Result := true;

      if rbByOrderInPM.Checked then
        AProjectSetting.TraceConnectOrder := ctPMOrder
      else
      if rbNumPanelWithNumPort.Checked then
        AProjectSetting.TraceConnectOrder := ctNumPanelWithNumPort;

      if rbOnePortToOne.Checked then
        AProjectSetting.TraceOnePortToOne := true
      else
      if rbOnePortOrMoreToOne.Checked then
        AProjectSetting.TraceOnePortToOne := false;

      AProjectSetting.TraceNoAskParams := cbNoAskParams.Checked;
      if SprCompType <> nil then
      begin
        if BeginFrom.Checked then
        begin
          if  neNewComponIndex.Value > 0 then
            SprCompType.ComponentType.ComponentIndex := neNewComponIndex.IntValue-1;
        end;
        if ProjArea.Checked then
          SprCompType.ComponentType.ComponentIndex := -2;
        if ListArea.Checked then
          SprCompType.ComponentType.ComponentIndex := -3;
      end;
    end;
  end;
end;

procedure TF_AutoTraceConnectOrder.rbTraceManualCableClick(
  Sender: TObject);
begin
  rbOnePortToOne.Checked := True;
end;

procedure TF_AutoTraceConnectOrder.BeginFromClick(Sender: TObject);
begin
  neNewComponIndex.Enabled := true;
end;

procedure TF_AutoTraceConnectOrder.ProjAreaClick(Sender: TObject);
begin
  neNewComponIndex.Enabled := false;
end;

procedure TF_AutoTraceConnectOrder.ListAreaClick(Sender: TObject);
begin
   neNewComponIndex.Enabled := false;
end;

end.
