mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 17:25:39 +02:00
368 lines
12 KiB
ObjectPascal
368 lines
12 KiB
ObjectPascal
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.
|