1 unit BottleChainRuleEditor;
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, CheckLst, ComCtrls, BottleChainRule;
10 TfrmBottleChainRuleEditor = class(TForm)
11 PageControl: TPageControl;
12 tstGeneral: TTabSheet;
13 tstCondition: TTabSheet;
15 cbxRuleEnabled: TCheckBox;
19 memStringExpression: TMemo;
20 lstCondition: TCheckListBox;
21 lstAction: TCheckListBox;
23 procedure btnOKClick(Sender: TObject);
24 procedure lstConditionClickCheck(Sender: TObject);
25 procedure lstActionClickCheck(Sender: TObject);
26 procedure lstConditionDblClick(Sender: TObject);
27 procedure lstActionDblClick(Sender: TObject);
28 procedure edtTitleChange(Sender: TObject);
29 procedure cbxRuleEnabledClick(Sender: TObject);
30 procedure Button1Click(Sender: TObject);
33 FRule: TBottleChainRule;
34 FConditionsCheckStatus: array [0..High(BottleChainConditions)] of boolean;
35 FActionsCheckStatus: array [0..High(BottleChainActions)] of boolean;
36 procedure lstConditionChecked(Index: integer; Checked: boolean);
37 procedure lstActionChecked(Index: integer; Checked: boolean);
40 procedure InitializeDisplay;
41 procedure UpdateDisplay;
42 function Execute(EditRule: TBottleChainRule): boolean;
46 frmBottleChainRuleEditor: TfrmBottleChainRuleEditor;
52 { TfrmBottleChainListEditor }
54 function TfrmBottleChainRuleEditor.Execute(EditRule: TBottleChainRule): boolean;
56 if EditRule = nil then raise Exception.Create('EditRule is null');
60 Result := ShowModal = mrOk;
63 procedure TfrmBottleChainRuleEditor.UpdateDisplay;
67 memStringExpression.Text := FRule.StringExpression;
68 edtTitle.Text := FRule.Title;
69 cbxRuleEnabled.Checked := FRule.Enabled;
71 for i := 0 to High(BottleChainConditions) do begin
73 for j := 0 to FRule.Conditions.Count-1 do
74 if FRule.Conditions[j].ClassType = BottleChainConditions[i] then begin
76 lstCondition.Items[i] := (FRule.Conditions[j] as TBottleChainCondition).StringExpression;
79 lstCondition.Checked[i] := f;
80 FConditionsCheckStatus[i] := f;
82 lstCondition.Items[i] := BottleChainConditions[i].Title;
85 for i := 0 to High(BottleChainActions) do begin
87 for j := 0 to FRule.Actions.Count-1 do
88 if FRule.Actions[j].ClassType = BottleChainActions[i] then begin
90 lstAction.Items[i] := (FRule.Actions[j] as TBottleChainAction).StringExpression;
93 lstAction.Checked[i] := f;
94 FActionsCheckStatus[i] := f;
96 lstAction.Items[i] := BottleChainActions[i].Title;
100 procedure TfrmBottleChainRuleEditor.btnOKClick(Sender: TObject);
105 procedure TfrmBottleChainRuleEditor.InitializeDisplay;
107 ConditionClass: TBottleChainConditionClass;
108 ActionClass: TBottleChainActionClass;
110 lstCondition.Items.Clear;
111 for i := 0 to High(BottleChainConditions) do begin
112 ConditionClass := BottleChainConditions[i];
113 lstCondition.Items.Add(ConditionClass.Title);
115 lstAction.Items.Clear;
116 for i := 0 to High(BottleChainActions) do begin
117 ActionClass := BottleChainActions[i];
118 lstAction.Items.Add(ActionClass.Title);
122 procedure TfrmBottleChainRuleEditor.lstConditionClickCheck(
126 //
\82±
\82Ì
\82Ü
\82Ü
\82¾
\82Æ
\95s
\95Ö
\82È
\82Ì
\82Å
\8f\88\97\9d
127 for i := 0 to High(BottleChainConditions) do begin
128 if lstCondition.Checked[i] <> FConditionsCheckStatus[i] then
129 lstConditionChecked(i, lstCondition.Checked[i]);
133 procedure TfrmBottleChainRuleEditor.lstActionClickCheck(Sender: TObject);
136 //
\82±
\82Ì
\82Ü
\82Ü
\82¾
\82Æ
\95s
\95Ö
\82È
\82Ì
\82Å
\8f\88\97\9d
137 for i := 0 to High(BottleChainActions) do begin
138 if lstAction.Checked[i] <> FActionsCheckStatus[i] then
139 lstActionChecked(i, lstAction.Checked[i]);
143 procedure TfrmBottleChainRuleEditor.lstActionChecked(Index: integer;
145 var Action: TBottleChainAction;
148 if Checked then begin
149 Action := BottleChainActions[Index].Create(BottleChainRuleList);
150 Action.Rule := FRule;
151 if Action.Edit then begin
154 lstAction.Checked[Index] := false;
157 for i := FRule.Actions.Count-1 downto 0 do begin
158 if FRule.Actions[i].ClassType = BottleChainActions[Index] then
159 FRule.Actions[i].Free;
165 procedure TfrmBottleChainRuleEditor.lstConditionChecked(Index: integer;
167 var Condition: TBottleChainCondition;
170 if Checked then begin
171 Condition := BottleChainConditions[Index].Create(BottleChainRuleList);
172 Condition.Rule := FRule;
173 if Condition.Edit then begin
176 lstCondition.Checked[Index] := false;
179 for i := FRule.Conditions.Count-1 downto 0 do begin
180 if FRule.Conditions[i].ClassType = BottleChainConditions[Index] then
181 FRule.Conditions[i].Free;
188 procedure TfrmBottleChainRuleEditor.lstConditionDblClick(Sender: TObject);
189 var index, i: integer;
191 index := lstCondition.ItemIndex;
192 if Index < 0 then Exit;
193 if lstCondition.Checked[Index] then begin
194 for i := 0 to FRule.Conditions.Count-1 do
195 if FRule.Conditions[i].ClassType = BottleChainConditions[Index] then begin
196 (FRule.Conditions[i] as TBottleChainCondition).Edit;
200 lstCondition.Checked[Index] := true;
201 lstConditionChecked(Index, true);
206 procedure TfrmBottleChainRuleEditor.lstActionDblClick(Sender: TObject);
207 var index, i: integer;
209 index := lstAction.ItemIndex;
210 if Index < 0 then Exit;
211 if lstAction.Checked[Index] then begin
212 for i := 0 to FRule.Actions.Count-1 do
213 if FRule.Actions[i].ClassType = BottleChainActions[Index] then begin
214 (FRule.Actions[i] as TBottleChainAction).Edit;
218 lstAction.Checked[Index] := true;
219 lstActionChecked(Index, true);
224 procedure TfrmBottleChainRuleEditor.edtTitleChange(Sender: TObject);
226 FRule.Title := edtTitle.Text;
229 procedure TfrmBottleChainRuleEditor.cbxRuleEnabledClick(Sender: TObject);
231 FRule.Enabled := cbxRuleEnabled.Checked;
234 procedure TfrmBottleChainRuleEditor.Button1Click(Sender: TObject);
236 ModalResult := mrCancel;