BSOne.SFC/Tocsg.Module/Bs1Flt/bs1dc_Delphi/DataFlowSettingForm.pas

216 lines
6.0 KiB
Plaintext

unit DataFlowSettingForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls,
Bs1PolicyUnit;
type
TDataFlowSettingForm = class(TForm)
PanelBottom: TPanel;
btnSave: TButton;
btnClose: TButton;
PageControlMain: TPageControl;
// [탭 1] 예외 경로
tsException: TTabSheet;
PanelExTop: TPanel;
LabelEx: TLabel;
EditExPath: TEdit;
btnAddEx: TButton;
btnDelEx: TButton;
ListBoxExceptions: TListBox;
// [탭 2] MTP/BT 제어
tsDevice: TTabSheet;
GroupBoxMtp: TGroupBox;
LabelM1: TLabel; LabelM2: TLabel;
cbMtpPolicy: TComboBox;
edtMtpSize: TEdit;
GroupBoxBt: TGroupBox;
LabelB1: TLabel; LabelB2: TLabel;
cbBtPolicy: TComboBox;
edtBtSize: TEdit;
grpCDROM: TGroupBox;
grbUsbToUsb: TGroupBox;
lbl1: TLabel;
lbl2: TLabel;
cbbCDROMPolicy: TComboBox;
lbl3: TLabel;
lbl4: TLabel;
cbbUsbToUsbPolicy: TComboBox;
edtCDROMSize: TEdit;
edtUsbToUsbSize: TEdit; // 수정사항 반영 버튼
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
// Tab 1: Exception
procedure btnAddExClick(Sender: TObject);
procedure btnDelExClick(Sender: TObject);
procedure ListBoxExceptionsClick(Sender: TObject);
// Tab 3: Hook
procedure lbHookProcClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure PanelBottomClick(Sender: TObject);
private
FTempConfig: TDataFlowConfig; // 편집 중인 임시 데이터 (Cancel 지원용)
procedure LoadUIFromConfig;
// procedure SaveUIToConfig;
procedure ClearHookDetails;
public
procedure SetEngine(AEngine: TBs1Policy);
end;
var
DataFlowForm: TDataFlowSettingForm;
implementation
{$R *.dfm}
procedure TDataFlowSettingForm.FormCreate(Sender: TObject);
begin
Caption := '파일 차단 정책 설정';
Position := poOwnerFormCenter;
FTempConfig := TDataFlowConfig.Create;
// 콤보박스 초기화
cbMtpPolicy.Items.AddStrings(['0: Allow', '1: Block']);
cbBtPolicy.Items.AddStrings(['0: Allow', '1: Block']);
cbbCDROMPolicy.Items.AddStrings(['0: Allow', '1: Block']);
cbbUsbToUsbPolicy.Items.AddStrings(['0: Allow', '1: Block']);
end;
procedure TDataFlowSettingForm.FormDestroy(Sender: TObject);
begin
FTempConfig.Free;
end;
procedure TDataFlowSettingForm.SetEngine(AEngine: TBs1Policy);
begin
if Assigned(gBs1Policy) then
begin
gBs1Policy.LoadDataFlowConfig; // 최신 데이터 로드
// 임시 객체로 복사 (편집 중 취소 가능하게)
FTempConfig.Assign(gBs1Policy.DataFlowConfig);
LoadUIFromConfig;
end;
end;
procedure TDataFlowSettingForm.LoadUIFromConfig;
begin
// 1. Exception Path
ListBoxExceptions.Items.Assign(FTempConfig.GlobalExceptionPath);
// 2. MTP/BT
cbMtpPolicy.ItemIndex := FTempConfig.MtpConfig.Policy; // 값 범위 체크 필요 시 보강
edtMtpSize.Text := IntToStr(FTempConfig.MtpConfig.FileSize);
cbBtPolicy.ItemIndex := FTempConfig.BtConfig.Policy;
edtBtSize.Text := IntToStr(FTempConfig.BtConfig.FileSize);
cbbCDROMPolicy.ItemIndex := FTempConfig.CDROMConfig.Policy;
edtCDROMSize.Text := IntToStr(FTempConfig.CDROMConfig.FileSize);
cbbUsbToUsbPolicy.ItemIndex := FTempConfig.UsbToUsbConfig.Policy;
edtUsbToUsbSize.Text := IntToStr(FTempConfig.UsbToUsbConfig.FileSize);
ClearHookDetails;
end;
procedure TDataFlowSettingForm.PanelBottomClick(Sender: TObject);
begin
end;
// -----------------------------------------------------------------------------
// [탭 1] Exception Path
// -----------------------------------------------------------------------------
procedure TDataFlowSettingForm.btnAddExClick(Sender: TObject);
begin
if Trim(EditExPath.Text) <> '' then
begin
ListBoxExceptions.Items.Add(Trim(EditExPath.Text));
EditExPath.Text := '';
end;
end;
procedure TDataFlowSettingForm.btnDelExClick(Sender: TObject);
begin
if ListBoxExceptions.ItemIndex >= 0 then
ListBoxExceptions.Items.Delete(ListBoxExceptions.ItemIndex);
end;
procedure TDataFlowSettingForm.ListBoxExceptionsClick(Sender: TObject);
begin
if ListBoxExceptions.ItemIndex >= 0 then
EditExPath.Text := ListBoxExceptions.Items[ListBoxExceptions.ItemIndex];
end;
// -----------------------------------------------------------------------------
// [탭 3] Hook Process
// -----------------------------------------------------------------------------
procedure TDataFlowSettingForm.ClearHookDetails;
begin
end;
procedure TDataFlowSettingForm.lbHookProcClick(Sender: TObject);
var
Item: THookProcessItem;
begin
end;
// -----------------------------------------------------------------------------
// [Main] Save & Close
// -----------------------------------------------------------------------------
procedure TDataFlowSettingForm.btnSaveClick(Sender: TObject);
begin
if not Assigned(gBs1Policy) then Exit;
// 1. Exception Path 반영
FTempConfig.GlobalExceptionPath.Assign(ListBoxExceptions.Items);
// 2. MTP/BT 반영
if cbMtpPolicy.ItemIndex >= 0 then FTempConfig.MtpConfig.Policy := cbMtpPolicy.ItemIndex;
FTempConfig.MtpConfig.FileSize := StrToIntDef(edtMtpSize.Text, 20);
if cbBtPolicy.ItemIndex >= 0 then FTempConfig.BtConfig.Policy := cbBtPolicy.ItemIndex;
FTempConfig.BtConfig.FileSize := StrToIntDef(edtBtSize.Text, 20);
if cbbCDROMPolicy.ItemIndex >= 0 then FTempConfig.CDROMConfig.Policy := cbbCDROMPolicy.ItemIndex;
FTempConfig.CDROMConfig.FileSize := StrToIntDef(edtCDROMSize.Text, 20);
if cbbUsbToUsbPolicy.ItemIndex >= 0 then FTempConfig.UsbToUsbConfig.Policy := cbbUsbToUsbPolicy.ItemIndex;
FTempConfig.UsbToUsbConfig.FileSize := StrToIntDef(edtUsbToUsbSize.Text, 20);
// 3. 실제 엔진에 반영 후 저장
gBs1Policy.DataFlowConfig.Assign(FTempConfig);
try
gBs1Policy.SaveDataFlowConfig;
ShowMessage('저장 완료');
ModalResult := mrOk;
except
on E: Exception do ShowMessage('저장 실패: ' + E.Message);
end;
end;
procedure TDataFlowSettingForm.btnCloseClick(Sender: TObject);
begin
Close;
end;
end.