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

368 lines
12 KiB
ObjectPascal
Raw Permalink Blame History

unit U_MakeEditPortInterfRel;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
U_BaseCommon, U_BaseConstants, ExtCtrls, RzPanel, RzButton, cxStyles, cxCustomData,
cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData,
cxGridLevel, cxClasses, cxControls, cxGridCustomView,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid,
kbmMemTable, siComp, siLngLnk, cxLookAndFeels, cxLookAndFeelPainters,
cxNavigator;
type
TF_MakeEditPortInterfRel = class(TForm)
gbInterfaces: TRzGroupBox;
RzGroupBox2: TRzGroupBox;
btOk: TRzBitBtn;
btCancel: TRzBitBtn;
GT_Interfaces: TcxGridDBTableView;
GL_Interfaces: TcxGridLevel;
Grid_Interfaces: TcxGrid;
DSrcInterfaces: TDataSource;
mtInterfaces: TkbmMemTable;
lng_Forms: TsiLangLinked;
procedure FormCreate(Sender: TObject);
procedure RzGroupBox2Resize(Sender: TObject);
procedure GT_InterfacesDblClick(Sender: TObject);
private
GForm: TForm;
FEditingInterfRelID: Integer;
FEditingPortInterfRelID: Integer;
FIDPortComponent: Integer;
FIgnoreIDPort: Integer;
FIgnoreIDToSelect: Integer;
FMakeEdit: TMakeEdit;
FmtEditingPortInterfRel: TkbmMemTable;
FmeInterfaceRel: TmeInterfaceRel;
FmtPorts: TkbmMemTable;
FmtPortInterfRel: TkbmMemTable;
FmtInterfaces: TkbmMemTable;
FIsPort: Integer;
procedure LoadAccessibleInterfaces;
public
Constructor Create(AOwner: TComponent; AForm: TForm);
Destructor Destroy; override;
function Execute(AMakeEdit: TMakeEdit; AmeInterfaceRel: TmeInterfaceRel;
AmtEditingPortInterfaces: TkbmMemTable; AIgnoreIDPort: Integer): Boolean;
function SelectInterfForInternalConn(AMakeEdit: TMakeEdit; AmeInterfaceRel: TmeInterfaceRel;
AmtInterfInternalConn: TkbmMemTable; AIgnoreID: Integer): Boolean;
end;
//var
// F_MakeEditPortInterfRel: TF_MakeEditPortInterfRel;
implementation
Uses U_Main, Unit_DM_SCS;
{$R *.dfm}
{ TF_MakeEditPortInterfRel }
constructor TF_MakeEditPortInterfRel.Create(AOwner: TComponent;
AForm: TForm);
begin
GForm := AForm;
inherited Create(AOwner);
end;
destructor TF_MakeEditPortInterfRel.Destroy;
begin
inherited;
end;
function TF_MakeEditPortInterfRel.Execute(AMakeEdit: TMakeEdit;
AmeInterfaceRel: TmeInterfaceRel; AmtEditingPortInterfaces: TkbmMemTable;
AIgnoreIDPort: Integer): Boolean;
begin
Result := false;
FMakeEdit := AMakeEdit;
FmeInterfaceRel := AmeInterfaceRel;
FEditingInterfRelID := -1;
FEditingPortInterfRelID := -1;
FIDPortComponent := -1;
FIgnoreIDPort := AIgnoreIDPort;
FIgnoreIDToSelect := -1;
FmtEditingPortInterfRel := AmtEditingPortInterfaces;
FmtPortInterfRel := AmeInterfaceRel.mtPortInterfRel;
if Assigned(FmtPortInterfRel) then
FmtPorts := TkbmMemTable(FmtPortInterfRel.MasterSource.DataSet);
FmtInterfaces := AmeInterfaceRel.mtInterfaces;
case FMakeEdit of
meMake:
begin
Caption := cMakeEditPortInterfRel_Msg1_1;
FIDPortComponent := AmeInterfaceRel.ID_COMPONENT;
end;
meEdit:
begin
Caption := cMakeEditPortInterfRel_Msg1_2;
if FmtEditingPortInterfRel.RecordCount > 0 then
begin
FEditingPortInterfRelID := FmtEditingPortInterfRel.FieldByName(fnID).AsInteger;
FEditingInterfRelID := FmtEditingPortInterfRel.FieldByName(fnIDInterfRel).AsInteger;
FIDPortComponent := FmtPorts.FieldByName(fnIDComponent).AsInteger;
end;
end;
end;
gbInterfaces.Caption := cMakeEditPortInterfRel_Msg5_1;
LoadAccessibleInterfaces;
if FMakeEdit = meEdit then
mtInterfaces.Locate(fnID, FEditingInterfRelID, []);
if mtInterfaces.RecordCount = 0 then
ShowMessageByType(Self.Handle, smtDisplay, cMakeEditPortInterfRel_Msg2,
Application.Title, MB_ICONINFORMATION or MB_OK)
else
if ShowModal = mrOk then
Result := true;
end;
function TF_MakeEditPortInterfRel.SelectInterfForInternalConn(AMakeEdit: TMakeEdit; AmeInterfaceRel: TmeInterfaceRel;
AmtInterfInternalConn: TkbmMemTable; AIgnoreID: Integer): Boolean;
var
Msg: string;
begin
Result := false;
FMakeEdit := AMakeEdit;
//FIsPort := AIsPort;
//FmtInterfOrPort := AmtInterfOrPort;
//FmtInterfInternalConn := FmtInterfInternalConn;
FEditingInterfRelID := -1;
FEditingPortInterfRelID := -1;
FIgnoreIDPort := AIgnoreID;
FIDPortComponent := AmeInterfaceRel.ID_COMPONENT;
FmeInterfaceRel := AmeInterfaceRel;
FmtEditingPortInterfRel := AmtInterfInternalConn;
FmtPortInterfRel := AmeInterfaceRel.mtInterfInternalConnect;
if Assigned(FmtPortInterfRel) then
if Assigned(FmtPortInterfRel.MasterSource) then
FmtPorts := TkbmMemTable(FmtPortInterfRel.MasterSource.DataSet);
FmtInterfaces := FmtPorts; //AmeInterfaceRel.mtInterfaces;
//FEditingInterfRelID := FmtPorts.FieldByName(fnID).AsInteger; //FmtEditingPortInterfRel.FieldByName(fnIDInterfRel).AsInteger;
FIDPortComponent := FmtPorts.FieldByName(fnIDComponent).AsInteger;
FIgnoreIDToSelect := FmtPorts.FieldByName(fnID).AsInteger;
Caption := cMakeEditPortInterfRel_Msg3_1;
case AmeInterfaceRel.IsPort of
biTrue:
begin
Caption := cMakeEditPortInterfRel_Msg3_2;
gbInterfaces.Caption := cMakeEditPortInterfRel_Msg5_2;
end;
biFalse:
begin
Caption := cMakeEditPortInterfRel_Msg3_1;
gbInterfaces.Caption := cMakeEditPortInterfRel_Msg5_1;
end;
end;
{case FMakeEdit of
meMake:
begin
FIDPortComponent := AmeInterfaceRel.ID_COMPONENT;
end;
meEdit:
begin
Caption := '<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>';
if FmtEditingPortInterfRel.RecordCount > 0 then
begin
FEditingInterfRelID := FmtEditingPortInterfRel.FieldByName(fnIDInterfRel).AsInteger;
FIDPortComponent := FmtPorts.FieldByName(fnIDComponent).AsInteger;
end;
end;
end;}
LoadAccessibleInterfaces;
if FMakeEdit = meEdit then
mtInterfaces.Locate(fnID, FEditingInterfRelID, []);
if mtInterfaces.RecordCount = 0 then
begin
Msg := cMakeEditPortInterfRel_Msg4_1;
case AmeInterfaceRel.IsPort of
biTrue:
Msg := Msg + cMakeEditPortInterfRel_Msg4_3 + '. ' + cMakeEditPortInterfRel_Msg4_5;
biFalse:
Msg := Msg + cMakeEditPortInterfRel_Msg4_2 + '. ' + cMakeEditPortInterfRel_Msg4_4;
end;
ShowMessageByType(Self.Handle, smtDisplay, Msg,
Application.Title, MB_ICONINFORMATION or MB_OK);
end
else
if ShowModal = mrOk then
Result := true;
end;
procedure TF_MakeEditPortInterfRel.FormCreate(Sender: TObject);
var
i: Integer;
begin
with TF_Main(GForm).DM do
for i := 0 to MemTable_InterfaceRel.FieldDefs.Count - 1 do
Self.mtInterfaces.FieldDefs.Add(MemTable_InterfaceRel.FieldDefs[i].Name,
MemTable_InterfaceRel.FieldDefs[i].DataType,
MemTable_InterfaceRel.FieldDefs[i].Size);
GT_Interfaces.Assign(TF_Main(GForm).GT_INTERFACE);
GT_Interfaces.DataController.DataSource := DSrcInterfaces;
GT_Interfaces.OptionsSelection.CellSelect := false;
GT_Interfaces.OnDblClick := GT_InterfacesDblClick;
end;
procedure TF_MakeEditPortInterfRel.LoadAccessibleInterfaces;
var
SavedPortsRecNo: Integer;
SavedInterfacesRecNo: Integer;
SavedPortInterfRelNo: Integer;
SavedEdPortInterfRelNo: Integer;
CurrInterfRelID: Integer;
IsAccessible: Boolean;
i, j: Integer;
SavedMasterSource: TDataSource;
function CheckAccessInterfInPortInterfRel(AIDInterfRel: Integer;
AmtPortInterfRel: TkbmMemTable; AIgnorePortID: Integer): Boolean;
var
i: Integer;
IDPort: Integer;
begin
Result := true;
if AmtPortInterfRel.RecordCount > 0 then // Tolik 28/12/2019 --
begin
for i := 0 to AmtPortInterfRel.RecordCount - 1 do
begin
AmtPortInterfRel.RecNo := i+1;
//if AmtPortInterfRel.FieldByName(fnID).AsInteger <> FEditingPortInterfRelID then
IDPort := AmtPortInterfRel.FieldByName(fnIDPort).AsInteger;
if IDPort <> AIgnorePortID then
if AIDInterfRel <> FEditingInterfRelID then
//if (AmtPortInterfRel.FieldByName(fnIDInterfRel).AsInteger = AIDInterfRel) or
// (AmtPortInterfRel.FieldByName(fnIDInterfRel).AsInteger = FmeInterfaceRel.ID) then
if (AIDInterfRel = AmtPortInterfRel.FieldByName(fnIDInterfRel).AsInteger) or
(AIDInterfRel = IDPort) then
begin
Result := false;
Break; ///// BREAK /////
end;
end;
end;
end;
begin
if Not FmtEditingPortInterfRel.ControlsDisabled then
FmtEditingPortInterfRel.DisableControls;
if Not FmtPorts.ControlsDisabled then
FmtPorts.DisableControls;
if Not FmtInterfaces.ControlsDisabled then
FmtInterfaces.DisableControls;
if Not FmtPortInterfRel.ControlsDisabled then
FmtPortInterfRel.DisableControls;
if Not mtInterfaces.ControlsDisabled then
mtInterfaces.DisableControls;
SavedPortsRecNo := FmtPorts.RecNo;
SavedInterfacesRecNo := FmtInterfaces.RecNo;
SavedPortInterfRelNo := FmtPortInterfRel.RecNo;
SavedEdPortInterfRelNo := FmtEditingPortInterfRel.RecNo;
SavedMasterSource := FmtPortInterfRel.MasterSource;
FmtPortInterfRel.MasterSource := nil;
try
mtInterfaces.Active := false;
mtInterfaces.Active := true;
mtInterfaces.LoadFromDataSet(FmtInterfaces, []);
if mtInterfaces.RecordCount > 0 then
begin
mtInterfaces.Last;
while Not mtInterfaces.Bof do
begin
IsAccessible := true;
if mtInterfaces.FieldByName(fnTypeI).AsInteger = itFunctional then
begin
CurrInterfRelID := mtInterfaces.FieldByName(fnID).AsInteger;
if (CurrInterfRelID = FIgnoreIDToSelect) then
IsAccessible := false
else
begin
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
if mtInterfaces.FieldByName(fnIDComponent).AsInteger <> FIDPortComponent then
IsAccessible := false
else
if CurrInterfRelID <> FEditingInterfRelID then
begin
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if Not CheckAccessInterfInPortInterfRel(CurrInterfRelID, FmtEditingPortInterfRel, -1) then
IsAccessible := false;
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if IsAccessible then
if Not CheckAccessInterfInPortInterfRel(CurrInterfRelID, FmtPortInterfRel, FIgnoreIDPort) then
IsAccessible := false;
end;
end;
end
else
IsAccessible := false;
if Not IsAccessible then
mtInterfaces.Delete
else
mtInterfaces.Prior;
end;
end;
finally
FmtPortInterfRel.MasterSource := SavedMasterSource;
if SavedPortsRecNo > -1 then // Tolik 28/12/2019 --
FmtPorts.RecNo := SavedPortsRecNo;
if SavedInterfacesRecNo > -1 then // Tolik 28/12/2019 --
FmtInterfaces.RecNo := SavedInterfacesRecNo;
if SavedPortInterfRelNo > -1 then // Tolik 28/12/2019 --
FmtPortInterfRel.RecNo := SavedPortInterfRelNo;
if mtInterfaces.RecordCount > 0 then
mtInterfaces.First;
if SavedEdPortInterfRelNo > -1 then // Tolik 28/12/2019 --
FmtEditingPortInterfRel.RecNo := SavedEdPortInterfRelNo;
if FmtEditingPortInterfRel.ControlsDisabled then
FmtEditingPortInterfRel.EnableControls;
if FmtPorts.ControlsDisabled then
FmtPorts.EnableControls;
if FmtInterfaces.ControlsDisabled then
FmtInterfaces.EnableControls;
if FmtPortInterfRel.ControlsDisabled then
FmtPortInterfRel.EnableControls;
if mtInterfaces.ControlsDisabled then
mtInterfaces.EnableControls;
end;
end;
procedure TF_MakeEditPortInterfRel.RzGroupBox2Resize(Sender: TObject);
begin
SetMiddleControlChilds(TControl(Sender), Self);
end;
procedure TF_MakeEditPortInterfRel.GT_InterfacesDblClick(Sender: TObject);
begin
btOk.Click;
end;
end.