expertcad/SRC/SCSNormBase/U_PEAutotraceDialog.pas
2025-05-12 10:07:51 +03:00

1143 lines
34 KiB
ObjectPascal
Raw Blame History

unit U_PEAutoTraceDialog;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, RzPanel, RzRadGrp, RzButton, RzRadChk, exgrid,
RapTree, FlytreePro, StdCtrls, RzLabel, RzSplit,
U_SCSComponent, U_SCSLists, Mask, RzEdit, RzSpnEdt, Buttons, siComp,
siLngLnk, DrawObjects, ComCtrls;
type
TF_PEAutotraceDialog = class(TForm)
TypeAutotrace_RadioGroup: TRzRadioGroup;
Panel1: TPanel;
bOk: TRzBitBtn;
bCancel: TRzBitBtn;
Panel2: TPanel;
RzSplitter1: TRzSplitter;
tvEndObject: TFlyTreeViewPro;
tvWorkObject: TFlyTreeViewPro;
RzPanel1: TRzPanel;
RzLabel1: TRzLabel;
RzPanel2: TRzPanel;
RzLabel2: TRzLabel;
PutBox_Check: TRzCheckBox;
RzPanel3: TRzPanel;
GetBox_Edit: TRzEdit;
Label1: TLabel;
AKolTrace_Edit: TRzSpinEdit;
TraceFromSwitch_CheckBox: TRzCheckBox;
GetBox_btn: TSpeedButton;
lng_Forms: TsiLangLinked;
AutotraceKind: TRzRadioGroup;
TypeConnection: TRzRadioGroup;
DoNotUseUpDown: TRzCheckBox;
CheckPassedTraces: TRzCheckBox;
CheckCanConnectCable: TRzCheckBox;
IgnoreExistingCable: TRzCheckBox;
SpeedButton5: TSpeedButton;
SpeedButton3: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure bOkClick(Sender: TObject);
procedure bCancelClick(Sender: TObject);
procedure GetBox_btnClick(Sender: TObject);
procedure PutBox_CheckClick(Sender: TObject);
procedure AKolTrace_EditChange(Sender: TObject);
procedure tvEndObjectDeletion(Sender: TObject; Node: TFlyNode);
procedure AutotraceKindChanging(Sender: TObject; NewIndex: Integer;
var AllowChange: Boolean);
procedure TypeConnectionChanging(Sender: TObject; NewIndex: Integer;
var AllowChange: Boolean);
procedure TypeAutotrace_RadioGroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
procedure FormShow(Sender: TObject);
procedure IgnoreExistingCableClick(Sender: TObject);
procedure tvEndObjectStateChange(Node: TFlyNode; Oldindex: Integer);
procedure tvWorkObjectStateChange(Node: TFlyNode; Oldindex: Integer);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure btCanComplectClick1(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
private
{ Private declarations }
FKolTrace: Integer;
LampParentNode, SwitchParentNode: TFlyNode;
procedure ExportResultInLists;
public
{ Public declarations }
ListEndCompon, ListWorkCompon: TIntList;
RaspredBox: TSCSComponent;
FromAutoTraceDialog: Boolean;
ListLampCompon, ListSwitchesCompon: TIntList;
//Tolik
ShowBadCableConnect: Boolean;
currTreeNode: TFlyNode;
NewRaspredBox: Boolean;
Cypher: String;
LastAddedCableIDList: TIntList;
RaspredBoxConnectorList: TList;
RaspredBoxList: TSCSComponents;
property KolTrace: integer read FKolTrace;
procedure BuildTree(Atree: TFlyTreeViewPro; ListFolder: TStringList; ListObject: Tlist; AIndLamp: integer = -1; AIndSwitch: integer = -1 );
procedure CopyEndListToSwitchesList;
Procedure DeleteDoublesfromWorkTree; // Tolik 26/03/2021 --
Procedure DeselectConnected;
end;
var
F_PEAutoTraceDialog: TF_PEAutotraceDialog;
// function AddChild(ATree: TFlyTreeViewPro; AParentNode:TFlyNode; AChildComplects: TSCSComponents): TFlyNode;
// Function AddNode (ATree: TFlyTreeViewPro; ACurrNode: TFlyNode; ACompon: TSCSComponent; AString: string = ''): TFlyNode;
implementation
uses U_main, Treecoll, U_PECommon, U_PEGetBox, u_BaseCommon, U_BaseConstants,
U_Common, U_Cad, PowerCad, U_ESCadClasess,
U_SCSEngineTest, U_Constants, {Tolik -- 18/01/2017 -- }U_AnswerToQuast;
{$R *.dfm}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
procedure TF_PEAutotraceDialog.BuildTree(Atree: TFlyTreeViewPro; ListFolder: TStringList;
ListObject: Tlist; AIndLamp: integer = -1; AIndSwitch: integer = -1);
var
currNode,RememberNode: TFlyNode;
currCompon: TSCSComponent;
i, j: integer;
begin
currNode := nil;
RememberNode := nil;
Try
if aTree.Items.Count > 0 then // Tolik 03/04/2021 --
ATree.Items.Clear;
if ListFolder.Count > 0 then
begin
For i := 0 to ListFolder.Count -1 do
begin
RememberNode := nil;
currNode := Nil;
currNode := AddNode(Atree, currNode, nil, ListFolder[i]);
if i = AIndLamp then
begin
LampParentNode := currNode;
end;
if i = AIndSwitch then
begin
SwitchParentNode := currNode;
end;
if ListObject.Count > 0 then // Tolik 03/04/2021 --
begin
for j := 0 to TList(ListObject[i]).Count - 1 do
begin
currCompon := TscsComponent(TList(ListObject[i]).Items[j]);
currNode := AddNode(Atree, currNode, currCompon);
end;
end;
if currNode <> nil then // Tolik 03/04/2021 --
begin
Atree.NodeStateRefreshParent(currNode, false);
currNode := Atree.Items[i];
Atree.NodeStateRefreshParent(currNode, false);
end;
end;
if currNode <> nil then // Tolik 03/04/2021 --
i := currNode.StateIndex;
end;
Except
on E: Exception do addExceptionToLogEx('TF_PEAutotraceDialog.BuildTree', E.Message);
End;
end;
procedure TF_PEAutotraceDialog.ExportResultInLists;
procedure PutResultsFromTreeInList(ATree : TFlyTreeViewPro; Alist: TintList);
var
i: integer;
CurrNode, ChildNode: TFlyNode;
procedure AddToSwitchListNode(ANode: TFlyNode);
var
i: integer;
begin
if ANode.StateIndex = 2 then
begin
If TNodeData(ANode.Data).ID = -1 then
for i := 0 to ANode.Count - 1 do
begin
ListSwitchesCompon.Add(TNodeData(ANode.Items[i].Data).ID);
end
else
ListSwitchesCompon.Add(TNodeData(ANode.Data).ID);
end;
//if CurrNode.StateIndex > 2 then
if ANode.StateIndex > 2 then
begin
for i := 0 to ANode.Count - 1 do
begin
AddToSwitchListNode(ANode.Item[i]);
end;
end;
end;
procedure AddToLampListNode(ANode: TFlyNode);
var
i: integer;
begin
if ANode.StateIndex = 2 then
begin
If TNodeData(ANode.Data).ID = -1 then
for i := 0 to ANode.Count - 1 do
begin
ListLampCompon.Add(TNodeData(ANode.Items[i].Data).ID);
end
else
ListLampCompon.Add(TNodeData(ANode.Data).ID);
end;
//if CurrNode.StateIndex > 2 then
if ANode.StateIndex > 2 then
begin
for i := 0 to ANode.Count - 1 do
begin
AddToLampListNode(ANode.Item[i]);
end;
end;
end;
procedure AddToListNode(ANode: TFlyNode);
var
i: integer;
begin
//Tolik
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ANode.StateIndex = 2 then
begin
// Tolik -- <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
//if AList.IndexOf(TNodeData(ANode.Data).ID) = -1 then
if (TNodeData(ANode.Data).ID <> -1) and (AList.IndexOf(TNodeData(ANode.Data).ID) = -1) then
Alist.Add(TNodeData(ANode.Data).ID);
//
// Tolik 20/11/2015
//if ANode.Expanded then
if (ANode.Expanded or (TNodeData(ANode.Data).ID = -1)) then // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
begin
for i := 0 to ANode.Count - 1 do
begin
if TFlyNode(ANode.Item[i]).StateIndex = 2 then
begin
Alist.Add(TNodeData(ANode.Items[i].Data).ID);
AddToListNode(TFlyNode(ANode.Item[i]));
end;
end;
end;
end;
{
if ANode.StateIndex = 2 then
begin
If TNodeData(ANode.Data).ID = -1 then
for i := 0 to ANode.Count - 1 do
begin
Alist.Add(TNodeData(ANode.Items[i].Data).ID);
end
else
Alist.Add(TNodeData(ANode.Data).ID);
end;
}
//if CurrNode.StateIndex > 2 then
if ANode.StateIndex > 2 then
begin
for i := 0 to ANode.Count - 1 do
begin
AddToListNode(TFlyNode(ANode.Item[i]));
end;
end;
end;
begin
CurrNode := ATree.GetFirstVisibleNode;
while CurrNode <> Nil do
begin
if CurrNode = LampParentNode then
begin
AddToLampListNode(CurrNode);
end
else
if CurrNode = SwitchParentNode then
begin
AddToSwitchListNode(CurrNode);
end
else
begin
AddToListNode(CurrNode);
end;
CurrNode := CurrNode.GetNextSibling;
end;
end;
procedure PutResultsFromTreeInWorkList(ATree : TFlyTreeViewPro; Alist: TintList);
var
i: integer;
CurrNode, ChildNode: TFlyNode;
procedure AddToSwitchListNode(ANode: TFlyNode);
var
i: integer;
begin
if ANode.StateIndex = 2 then
begin
If TNodeData(ANode.Data).ID = -1 then
for i := 0 to ANode.Count - 1 do
begin
ListSwitchesCompon.Add(TNodeData(ANode.Items[i].Data).ID);
end
else
ListSwitchesCompon.Add(TNodeData(ANode.Data).ID);
end;
//if CurrNode.StateIndex > 2 then
if ANode.StateIndex > 2 then
begin
for i := 0 to ANode.Count - 1 do
begin
AddToSwitchListNode(ANode.Item[i]);
end;
end;
end;
procedure AddToLampListNode(ANode: TFlyNode);
var
i: integer;
begin
if ANode.StateIndex = 2 then
begin
If TNodeData(ANode.Data).ID = -1 then
for i := 0 to ANode.Count - 1 do
begin
ListLampCompon.Add(TNodeData(ANode.Items[i].Data).ID);
end
else
ListLampCompon.Add(TNodeData(ANode.Data).ID);
end;
//if CurrNode.StateIndex > 2 then
if ANode.StateIndex > 2 then
begin
for i := 0 to ANode.Count - 1 do
begin
AddToLampListNode(ANode.Item[i]);
end;
end;
end;
procedure AddToListNode(ANode: TFlyNode);
var
i: integer;
begin
//Tolik
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ANode.StateIndex = 2 then
begin
// if AList.IndexOf(TNodeData(ANode.Data).ID) = -1 then
// Tolik -- 20/11/2015 -- <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (AList.IndexOf(TNodeData(ANode.Data).ID) = -1) and (ANode.Expanded = False) and
(TNodeData(ANode.Data).ID <> -1) then
//
Alist.Add(TNodeData(ANode.Data).ID);
// Tolik
//if ANode.Expanded then
if ANode.Expanded or (TNodeData(ANode.Data).ID = -1) then // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//
begin
for i := 0 to ANode.Count - 1 do
begin
if TFlyNode(ANode.Item[i]).StateIndex = 2 then
begin
//Tolik
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
// <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
if TFlyNode(ANode.Item[i]).Expanded then
AddToListNode(TFlyNode(ANode.Item[i]))
else
Alist.Add(TNodeData(ANode.Items[i].Data).ID);
// Alist.Add(TNodeData(ANode.Items[i].Data).ID);
// AddToListNode(TFlyNode(ANode.Item[i]));
//
end;
end;
end
{else
if ANode.StateIndex = 2 then
begin
If TNodeData(ANode.Data).ID = -1 then
for i := 0 to ANode.Count - 1 do
begin
Alist.Add(TNodeData(ANode.Items[i].Data).ID);
end
else
Alist.Add(TNodeData(ANode.Data).ID);
end;}
end;
//if CurrNode.StateIndex > 2 then
if ANode.StateIndex > 2 then
begin
for i := 0 to ANode.Count - 1 do
begin
AddToListNode(TFlyNode(ANode.Item[i]));
end;
end;
end;
begin
CurrNode := ATree.GetFirstVisibleNode;
while CurrNode <> Nil do
begin
if CurrNode = LampParentNode then
begin
AddToLampListNode(CurrNode);
end
else
if CurrNode = SwitchParentNode then
begin
AddToSwitchListNode(CurrNode);
end
else
begin
AddToListNode(CurrNode);
end;
CurrNode := CurrNode.GetNextSibling;
end;
end;
begin
if ListEndCompon <> Nil then
ListEndCompon.Clear
else
ListEndCompon := TIntList.Create;
if ListWorkCompon <> Nil then
ListWorkCompon.Clear
else
ListWorkCompon := TIntList.Create;
if ListLampCompon <> Nil then
ListLampCompon.Clear
else
ListLampCompon := TIntList.Create;
if ListSwitchesCompon <> Nil then
ListSwitchesCompon.Clear
else
ListSwitchesCompon := TIntList.Create;
//Tolik
tvEndObject.Refresh;
tvWorkObject.Refresh;
//
PutResultsFromTreeInList(tvEndObject, ListEndCompon);
PutResultsFromTreeInWorkList(tvWorkObject, ListWorkCompon);
end;
procedure TF_PEAutotraceDialog.FormCreate(Sender: TObject);
begin
// Tolik 01/11/2019 --
AKolTrace_Edit.Min := 3;
AKolTrace_Edit.Max := 9;
//
FromAutoTraceDialog := false;
ListEndCompon := Nil;
ListWorkCompon := Nil;
LampParentNode := Nil;
SwitchParentNode := Nil;
RaspredBox := Nil;
ListLampCompon := Nil;
ListSwitchesCompon := Nil;
currTreeNode := nil;
end;
procedure TF_PEAutotraceDialog.FormDestroy(Sender: TObject);
begin
if ListEndCompon <> Nil then
ListEndCompon.Free;
if ListWorkCompon = Nil then
ListEndCompon.Free;
tvEndObject.Items.Clear;
tvWorkObject.Items.Clear;
end;
procedure TF_PEAutotraceDialog.bOkClick(Sender: TObject);
begin
ShowBadCableConnect := False;
NewRaspredBox := False;
Cypher :='';
LastAddedCableIDList := TIntList.Create;
RaspredBoxConnectorList := TList.Create;
RaspredBoxList := TSCSComponents.Create(False);
if PutBox_Check.Checked and (Not Assigned(RaspredBox)) then
MessageModal(cPEMes16, cPEMes15, MB_ICONWARNING)
else
begin
F_PEAutotraceDialog.FKolTrace := StrToInt(F_PEAutotraceDialog.AKolTrace_Edit.Text);
FromAutoTraceDialog := true;
ExportResultInLists;
ModalResult := mrOk;
end;
end;
procedure TF_PEAutotraceDialog.bCancelClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TF_PEAutotraceDialog.GetBox_btnClick(Sender: TObject);
begin
if GetBox_btn.tag = 0 then
begin
GetBox_btn.tag := 1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
F_PEGetBox.SetNBToForm;
if F_PEGetBox.ShowModal = mrOk then
begin
if Assigned(RaspredBox) then
begin
RaspredBox.Free;
end;
RaspredBox := F_PEGetBox.GetCompon;
GetBox_Edit.Text := RaspredBox.Name;
end
else
PutBox_Check.Checked := false;
GetBox_btn.tag := 0;
end;
end;
procedure TF_PEAutotraceDialog.PutBox_CheckClick(Sender: TObject);
begin
if PutBox_Check.Checked then
begin
RzPanel3.Enabled := true;
if not Assigned(RaspredBox)then
F_PEAutotraceDialog.GetBox_btnClick(Sender);
end
else
begin
RzPanel3.Enabled := false;
end;
end;
procedure TF_PEAutotraceDialog.AKolTrace_EditChange(Sender: TObject);
var
len: integer;
begin
len := length(AKolTrace_Edit.EditText);
if len > 1 then
begin
AKolTrace_Edit.EditText := AKolTrace_Edit.EditText[len];
end;
end;
procedure TF_PEAutotraceDialog.tvEndObjectDeletion(Sender: TObject;
Node: TFlyNode);
begin
if Assigned(Node.Data) then
FreeMemory(Node.Data);
end;
procedure TF_PEAutotraceDialog.CopyEndListToSwitchesList;
var
i: integer;
begin
for i := 0 to F_PEAutotraceDialog.ListEndCompon.count -1 do
begin
F_PEAutotraceDialog.ListSwitchesCompon.add(F_PEAutotraceDialog.ListEndCompon[i]);
end;
end;
function GetTreeNodebyDataID(aNode: TFlyNode; dataID: integer): TFlyNode;
var i: integer;
ChildNode: TFlyNode;
begin
Result := nil;
if TNodeData(aNode.Data).ID = dataID then
Result := aNode
else
begin
for i := 0 to aNode.Count - 1 do
begin
ChildNode := aNode.Item[i];
Result := GetTreeNodebyDataID(ChildNode, dataID);
if Result <> nil then
Break; //// BREAK ////;
end;
end;
end;
Procedure TF_PEAutotraceDialog.DeleteDoublesfromWorkTree; // Tolik 26/03/2021 --
var i, j: integer;
ENode, WNode: TFlyNode;
Procedure DeleteDoubleNodes(aNode: TFlyNode; NodeDataID: integer);
var i: integer;
delNode, WNode: TFlyNode;
begin
if TNodeData(aNode.Data).ID <> -1 then
begin
for i := 0 to tvWorkObject.Items.Count - 1 do
begin
WNode := tvWorkObject.Items[i];
delNode := GetTreeNodebyDataID(WNode, NodeDataID);
if delNode <> nil then
tvWorkObject.Items.Delete(delNode);
end;
end;
end;
Procedure delWNode(aNode: TFlyNode; NodeDataID: integer);
var i: integer;
ChildNode: TFlyNode;
begin
DeleteDoubleNodes(aNode, NodeDataID);
for i := 0 to aNode.Count - 1 do
begin
ChildNode := aNode.Item[i];
delWNode(ChildNode, TNodeData(ChildNode.Data).ID);
end;
end;
begin
for i := 0 to tvEndObject.Items.Count - 1 do
begin
ENode := tvEndObject.Items[i];
DelWNode(eNode, TNodeData(ENode.Data).ID);
end;
for i := tvWorkObject.Items.Count - 1 downto 0 do
begin
WNode := tvWorkObject.Items[i];
if TNodeData(WNode.Data).ID = -1 then
if WNode.Count = 0 then
tvWorkObject.Items.Delete(WNode);
end;
end;
Procedure TF_PEAutotraceDialog.DeselectConnected;
var i: integer;
Node: TFlyNode;
tvWorkEvent: TStateChangedEvent;
Procedure disableNode(aNode: TflyNode);
var childNode: TFlyNode;
SCSComponent: TSCSComponent;
i: integer;
begin
if TNodeData(aNode.Data).ID <> -1 then
begin
SCSComponent := F_ProjMan.GSCSBase.CurrProject.GetComponentFromReferences(TNodeData(aNode.Data).ID);
if SCSComponent <> nil then
begin
if SCSComponent.JoinedComponents.Count > 0 then
begin
for i := 0 to SCSComponent.JoinedComponents.Count - 1 do
begin
if isCableComponent(SCSComponent.JoinedComponents[i]) then
begin
aNode.BeginUpdate;
aNode.StateIndex := STATE_UNCHECKED;
tvWorkObject.NodeStateRefresh(aNode);
aNode.EndUpdate;
break;
end;
end;
end;
end;
end;
for i := 0 to aNode.Count - 1 do
begin
ChildNode := aNode.Item[i];
disableNode(ChildNode);
end;
end;
begin
tvWorkEvent := tvworkObject.OnStateChanged;
tvWorkObject.OnStateChanged := nil;
for i := 0 to tvWorkObject.Items.Count - 1 do
begin
Node := tvWorkObject.Items[i];
disableNode(Node);
end;
//tvWorkObject.RefreshTreeStates;
tvWorkObject.OnStateChanged := tvWorkEvent;
tvWorkObject.Refresh;
{for i := 0 to tvEndObject.Items.Count - 1 do
begin
Node := tvEndObject.Items[i];
disableNode(Node);
end;}
end;
procedure TF_PEAutotraceDialog.AutotraceKindChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
begin
if NewIndex = 1 then
begin
TraceFromSwitch_CheckBox.Checked := false;
TraceFromSwitch_CheckBox.Visible := false;
TypeConnection.Visible := true;
// Tolik
if TypeConnection.ItemIndex = 0 then
begin
TypeAutotrace_RadioGroup.Enabled := True;
CheckPassedTraces.Visible := False;
end
else
begin
TypeAutotrace_RadioGroup.Enabled := False;
CheckPassedTraces.Visible := True;
end;
//
end
else
begin
TraceFromSwitch_CheckBox.Visible := true;
TypeConnection.Visible := False;
//Tolik
TypeAutotrace_RadioGroup.Enabled := True;
TypeConnection.ItemIndex := 0;
CheckCanConnectCable.Visible := False;
end;
// Tolik 09/04/2021 --
if GCallAutoTraceElectricMaster then
IgnoreExistingCable.Visible := True
else
//
IgnoreExistingCable.Visible := (TypeAutotrace_RadioGroup.Enabled and (TypeAutotrace_RadioGroup.ItemIndex = 1) and
(NewIndex = 0) );
end;
procedure TF_PEAutotraceDialog.TypeConnectionChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
begin
if NewIndex = 1 then
//Tolik
begin
PutBox_Check.Enabled := false;
TypeAutotrace_RadioGroup.Enabled := False;
CheckPassedTraces.Visible := True;
CheckCanConnectCable.Visible := True;
end
else
begin
TypeAutotrace_RadioGroup.Enabled := True;
//PutBox_Check.Enabled := true;
PutBox_Check.Enabled := (TypeAutotrace_RadioGroup.ItemIndex = 1);
CheckPassedTraces.Visible := False;
CheckCanConnectCable.Visible := False;
end;
// Tolik 09/04/2021 --
if GCallAutoTraceElectricMaster then
IgnoreExistingCable.Visible := True
else
//
IgnoreExistingCable.Visible := (TypeAutotrace_RadioGroup.Enabled and (TypeAutotrace_RadioGroup.ItemIndex = 1) and
(AutotraceKind.ItemIndex = 0) );
end;
procedure TF_PEAutotraceDialog.TypeAutotrace_RadioGroupChanging(
Sender: TObject; NewIndex: Integer; var AllowChange: Boolean);
begin
// Tolik 09/04/2021 --
if GCallAutoTraceElectricMaster then
IgnoreExistingCable.Visible := True
else
//
IgnoreExistingCable.Visible := (TypeAutotrace_RadioGroup.Enabled and (NewIndex = 1) and
(AutotraceKind.ItemIndex = 0) );
PutBox_Check.Enabled := (NewIndex = 1);
end;
// Tolik
procedure TF_PEAutotraceDialog.FormShow(Sender: TObject);
var currList: TSCSList;
i, j: Integer;
currCatalog: TSCSCatalog;
Procedure ShowCatalogInPM(ACatalog : TSCSCatalog; aShowNode: Boolean = True);
var
Node: TTreeNode;
FirstChildNode: TTreeNode;
ObjID: Integer;
Catalog: TSCSCatalog;
//LastRoom: TSCSCatalog;
begin
//Exit; //#Del
try
with F_ProjMan do
begin
Catalog := ACatalog;
if Assigned(Catalog) then
begin
Node := nil;
FirstChildNode := nil;
if Catalog.SCSComponents.Count > 0 then
begin
Node := Catalog.SCSComponents.Items[0].TreeViewNode;
if Not Assigned(Node) then
Node := FindComponOrDirInTree(TSCSComponent(Catalog.SCSComponents.Items[0]).ID, true)
end
else
Node := Catalog.TreeViewNode; //FindComponOrDirInTree(ObjID, false);
if Not Assigned(Node) then
Node := FindComponOrDirInTree(Catalog.ID, false);
//Tolik
if aShowNode then
begin
//
if Assigned(Node) then
begin
// Tree_Catalog.Items.BeginUpdate;
try
Tree_Catalog.Selected := Node;
if Tree_Catalog.Selected <> Node then
Tree_Catalog.Selected := Node;
//Tolik
if aShowNode then
ShowSelectedNode(Tree_Catalog);
finally
// Tree_Catalog.Items.EndUpdate;
end;
end;
end;
end;
end;
except
on E: Exception do AddExceptionToLog('ShowCatalogInPM: '+E.Message);
end;
end;
begin
FromAutoTraceDialog := False;
currList := F_ProjMan.GSCSBase.CurrProject.CurrList;
if currList <> nil then
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
for i := 0 to currList.ChildCatalogs.Count - 1 do
begin
currCatalog := currList.ChildCatalogs[i];
if currCatalog <> nil then
ShowCatalogInPM(currCatalog);
end;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LastAdded <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
for i := 0 to currList.ChildCatalogReferences.Count - 1 do
begin
currCatalog := currList.ChildCatalogReferences[i];
if currCatalog <> nil then
begin
if currCatalog.LastAddedComponent <> nil then
begin
currCatalog.LastAddedComponent := nil;
currCatalog.IDLastAddedComponent := 0;
end;
end;
end;
end;
// Tolik 09/04/2021 --
if GCallAutoTraceElectricMaster then
IgnoreExistingCable.Visible := True
else
//
IgnoreExistingCable.Visible := (TypeAutotrace_RadioGroup.Enabled and (TypeAutotrace_RadioGroup.ItemIndex = 1) and
(AutotraceKind.ItemIndex = 0) );
IgnoreExistingCable.Checked := False;
end;
procedure TF_PEAutotraceDialog.IgnoreExistingCableClick(Sender: TObject);
var currComponent: TSCSComponent;
i: Integer;
CanCheck: Boolean;
begin
CanCheck := True;
if (F_PEAutotraceDialog.IgnoreExistingCable.Checked) then
begin
currComponent := F_NormBase.GSCSBase.SCSComponent;
if (currComponent <> nil) and (currComponent.IsLine = biTrue) then
begin
for i := 0 to currComponent.Interfaces.Count - 1 do
begin
if (currComponent.Interfaces[i].TypeI = itFunctional) and (currComponent.Interfaces[i].Multiple = biTrue) then
begin
CanCheck := False;
Break;
end;
end;
end;
end;
if not CanCheck then
begin
F_PEAutotraceDialog.IgnoreExistingCable.Checked := False;
ShowMessage(cPEMes25);
end;
end;
// Tolik -- New --19/11/2015
// Tolik -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
// Tolik -- New --19/11/2015
Procedure DropStateIndex(aNode: TFlyNode);
var i: Integer;
ChildNode: TFlyNode;
begin
if aNode.Count = 0 then
aNode.StateIndex := 2
else
begin
for i := 0 to aNode.UpdateCount - 1 do
begin
ChildNode := aNode.Item[i];
DropStateIndex(ChildNode);
end;
end;
end;
// Tolik -- New --19/11/2015
procedure TF_PEAutotraceDialog.tvEndObjectStateChange(Node: TFlyNode;
Oldindex: Integer);
var i, j: Integer;
aNode, NodeToChange: TFlyNode;
NodeFound: Boolean;
tvWorkEvent: TStateChangedEvent;
{ function GetTreeNodebyDataID(aNode: TFlyNode; dataID: integer): TFlyNode;
var i: integer;
ChildNode: TFlyNode;
begin
Result := nil;
if TNodeData(aNode.Data).ID = dataID then
Result := aNode
else
begin
for i := 0 to aNode.Count - 1 do
begin
ChildNode := aNode.Item[i];
Result := GetTreeNodebyDataID(ChildNode, dataID);
if Result <> nil then
Break; //// BREAK ////;
end;
end;
end;
Procedure DropStateIndex(aNode: TFlyNode);
var i: Integer;
ChildNode: TFlyNode;
begin
if aNode.Count = 0 then
aNode.StateIndex := 2
else
begin
for i := 0 to aNode.UpdateCount - 1 do
begin
ChildNode := aNode.Item[i];
DropStateIndex(ChildNode);
end;
end;
end;
}
begin
if OldIndex <> 2 then
begin
tvWorkEvent := tvWorkObject.OnStateChanged;
tvWorkObject.OnStateChanged := nil;
NodeFound := False;
NodeToChange := nil;
i := TNodeData(Node.Data).ID;
if i <> -1 then
begin
if tvWorkObject.Items.Count > 0 then
begin
for j := 0 to tvWorkObject.Items.Count - 1 do
begin
aNode := TFlyNode(tvWorkObject.Items[j]);
if TNodeData(aNode.Data).ID = i then
begin
NodeToChange := aNode;
end
else
NodeToChange := GetTreeNodebyDataID(aNode, i);
if NodeToChange <> nil then
Break; //// BREAK ////;
end;
{ if NodeToChange <> nil then
begin
NodeToChange.StateIndex := 1;
tvWorkObject.RefreshTreeStates;
tvWorkObject.Repaint;
end;}
if NodeToChange <> nil then
begin
if (TNodeData(NodeToChange.Data).Id = -1) then
NodeTochange.StateIndex := 1
else
begin
if NodeToChange.Parent.expanded then
NodeToChange.StateIndex := 1
else
begin
aNode := NodeToChange.Parent;
if TNodeData(aNode.Data).ID = -1 then
aNode.StateIndex := 1
else
begin
while ((not aNode.Parent.Expanded) and (TNodeData(aNode.Parent.Data).ID <> -1)) do
aNode := aNode.Parent;
aNode.Expand(true);
aNode.BeginUpdate;
DropStateIndex(aNode);
aNode.StateIndex := 1;
tvWorkObject.NodeStateRefreshChildren(aNode, True);
aNode.EndUpdate;
end;
end;
end;
end;
end;
end;
tvWorkObject.RefreshTreeStates;
tvWorkObject.Repaint;
tvWorkObject.OnStateChanged := tvWorkEvent;
end;
end;
// Tolik -- New --19/11/2015
procedure TF_PEAutotraceDialog.tvWorkObjectStateChange(Node: TFlyNode;
Oldindex: Integer);
var i, j: Integer;
aNode, NodeToChange: TFlyNode;
NodeFound: Boolean;
currEvent: TStateChangedEvent;
tvEndEvent: TStateChangedEvent;
ChildChecked: Boolean;
CanCheckNextTreeNode: Boolean;
begin
if OldIndex <> 2 then
begin
tvEndEvent := tvEndObject.OnStateChanged;
tvEndObject.OnStateChanged := nil;
NodeFound := False;
NodeToChange := nil;
i := TNodeData(Node.Data).ID;
if i <> -1 then // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
begin
if tvEndObject.Items.Count > 0 then
begin
for j := 0 to tvEndObject.Items.Count - 1 do
begin
aNode := TFlyNode(tvEndObject.Items[j]);
if TNodeData(aNode.Data).ID = i then
begin
NodeToChange := aNode;
end
else
NodeToChange := GetTreeNodebyDataID(aNode, i);
if NodeToChange <> nil then
Break; //// BREAK ////;
end;
if NodeToChange <> nil then
begin
if (TNodeData(NodeToChange.Data).Id = -1) then
NodeTochange.StateIndex := 1
else
begin
if NodeToChange.Parent.expanded then
NodeToChange.StateIndex := 1
else
begin
aNode := NodeToChange.Parent;
if TNodeData(aNode.Data).ID = -1 then
aNode.StateIndex := 1
else
begin
while ((not aNode.Parent.Expanded) and (TNodeData(aNode.Parent.Data).ID <> -1)) do
aNode := aNode.Parent;
aNode.Expand(true);
aNode.BeginUpdate;
DropStateIndex(aNode);
aNode.StateIndex := 1;
tvEndObject.NodeStateRefreshChildren(aNode, True);
aNode.EndUpdate;
end;
end;
end;
end;
end;
end;
tvEndObject.RefreshTreeStates;
tvEndObject.Repaint;
tvEndObject.OnStateChanged := tvEndEvent;
end;
end;
/////Tolik ----------18/01/2017
procedure TF_PEAutotraceDialog.SpeedButton2Click(Sender: TObject);
begin
{ TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption := cAddComponent_Msg6_1;
TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer := cAddComponent_Msg6_2;
TF_MAIN(F_NormBase).F_AnswerToQuast.ShowContextHelp(TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption, TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer);
}end;
procedure TF_PEAutotraceDialog.SpeedButton1Click(Sender: TObject);
begin
{ TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption := PE_HelpCapt3;
TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer := PE_HelpMsg_2;
TF_MAIN(F_NormBase).F_AnswerToQuast.ShowContextHelp(TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption, TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer);
}end;
procedure TF_PEAutotraceDialog.btCanComplectClick1(Sender: TObject);
begin
{ TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption := PE_HelpCapt4;
TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer := PE_HelpMsg_4;
TF_MAIN(F_NormBase).F_AnswerToQuast.ShowContextHelp(TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption, TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer);
}end;
//
procedure TF_PEAutotraceDialog.SpeedButton5Click(Sender: TObject);
begin
TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption := PE_HelpCapt2;
TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer := PE_HelpMsg_2;
TF_MAIN(F_NormBase).F_AnswerToQuast.ShowContextHelp(TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption, TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer);
end;
procedure TF_PEAutotraceDialog.SpeedButton3Click(Sender: TObject);
begin
TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption := PE_HelpCapt1;
TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer := PE_HelpMsg_1;
TF_MAIN(F_NormBase).F_AnswerToQuast.ShowContextHelp(TF_MAIN(F_NormBase).F_AnswerToQuast.GCaption, TF_MAIN(F_NormBase).F_AnswerToQuast.GAnswer);
end;
end.