6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7 StdCtrls, Buttons, ImgList, ComCtrls, Menus, BottleDef,
8 ActnList, ToolWin, ExtCtrls, ScriptConsts;
11 TfrmConstEditor = class(TForm)
15 tbtnNewGroup: TToolButton;
16 tbtnAddConst: TToolButton;
17 tbtnDelete: TToolButton;
19 tbtnDown: TToolButton;
20 ActionList1: TActionList;
26 PopUpMenu: TPopupMenu;
27 mnNewGroup: TMenuItem;
28 mnAddConst: TMenuItem;
32 pageConstText: TPageControl;
36 edtMenuCaption: TEdit;
38 edtMenuIfGhost: TEdit;
42 edtConstCaption: TEdit;
43 edtConstScript: TEdit;
44 cbxConstShortCut: TComboBox;
48 cbxConstFile: TComboBox;
49 mnDeleteConst: TMenuItem;
50 procedure actDeleteExecute(Sender: TObject);
51 procedure actMoveUpExecute(Sender: TObject);
52 procedure actMoveDownExecute(Sender: TObject);
53 procedure tvwConstChange(Sender: TObject; Node: TTreeNode);
54 procedure FormCreate(Sender: TObject);
55 procedure PopUpMenuPopup(Sender: TObject);
56 procedure btnCloseClick(Sender: TObject);
57 procedure tvwConstChanging(Sender: TObject; Node: TTreeNode;
58 var AllowChange: Boolean);
59 procedure cbxConstFileChange(Sender: TObject);
60 procedure actNewGroupExecute(Sender: TObject);
61 procedure actNewConstExecute(Sender: TObject);
62 procedure edtExit(Sender: TObject);
65 FTargetConstFile: TScriptConstFile;
66 FTargetItemID: integer;
68 function GetNodeByID(ID: integer): TTreeNode;
71 function Execute: boolean;
75 frmConstEditor: TfrmConstEditor;
91 function TfrmConstEditor.Execute: boolean;
94 cbxConstFile.Items.Clear;
95 for i := 0 to ScriptConstList.Count-1 do begin
96 cbxConstFile.Items.Add(ExtractFileName(ScriptConstList.Files[i].FileName));
98 if ScriptConstList.Count > 0 then begin
99 FTargetConstFile := ScriptConstList[0];
100 cbxConstFile.ItemIndex := 0;
102 FTargetConstFile := nil;
103 cbxConstFile.Text := '';
110 procedure TfrmConstEditor.actDeleteExecute(Sender: TObject);
113 if tvwConst.Selected = nil then Exit;
114 Node := tvwConst.Selected;
115 if Node.Level = 0 then begin
116 if Node.HasChildren then begin
117 if MessageDlg(Node.Text + '
\82É
\91®
\82·
\82é' + IntToStr(Node.Count) + '
\8cÂ
\82Ì
\92è
\8c^
\8bå
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\82©?',
118 mtConfirmation, mbOkCancel, 0) = mrCancel then Exit;
121 FTargetConstFile.Delete(integer(Node.Data));
122 tvwConst.OnChanging := nil;
123 tvwConst.Items.Delete(Node);
124 tvwConst.OnChanging := tvwConstChanging;
127 procedure TfrmConstEditor.actMoveUpExecute(Sender: TObject);
128 var Node, DestNode: TTreeNode;
130 Node := tvwConst.Selected;
131 FTargetConstFile.MoveUp(integer(Node.Data));
132 if Node.getPrevSibling <> nil then begin
133 DestNode := Node.getPrevSibling;
134 Node.MoveTo(DestNode, naInsert);
135 end else if Node.Level = 1 then begin
136 //
\91O
\82Ì
\83O
\83\8b\81[
\83v
\82Ì
\96\96\94ö
\82É
\88Ú
\93®
\82·
\82é
137 if Node.Parent.getPrevSibling = nil then Exit;
138 DestNode := Node.Parent.getPrevSibling;
139 Node.MoveTo(DestNode, naAddChild);
143 procedure TfrmConstEditor.actMoveDownExecute(Sender: TObject);
144 var Node, DestNode, NextNode: TTreeNode;
146 Node := tvwConst.Selected;
147 FTargetConstFile.MoveDown(integer(Node.Data));
148 if Node.getNextSibling <> nil then begin
149 NextNode := Node.getNextSibling;
150 NextNode.MoveTo(Node, naInsert);
151 end else if Node.Level = 1 then begin
152 //
\8e\9f\82Ì
\83O
\83\8b\81[
\83v
\82Ì
\90æ
\93ª
\82É
\88Ú
\93®
\82·
\82é
153 if Node.Parent.getNextSibling = nil then Exit;
154 DestNode := Node.Parent.getNextSibling;
155 Node.MoveTo(DestNode, naAddChildFirst);
159 procedure TfrmConstEditor.tvwConstChange(Sender: TObject; Node: TTreeNode);
160 var ConstData: TScriptConst;
161 MenuData: TScriptConstMenu;
164 if Node = nil then begin
165 pageConstText.Enabled := false;
167 pageConstText.Enabled := true;
168 ID := integer(Node.Data); //
\96{
\93\96\82Í
\82â
\82è
\82½
\82
\82È
\82¢
\83L
\83\83\83X
\83g
169 if Node.Level = 0 then begin
170 MenuData := ScriptConstList.GetMenuByID(ID);
171 pageConstText.ActivePage := tstMenu;
172 edtMenuCaption.Text := MenuData.Caption;
173 edtMenuIfGhost.Text := MenuData.IfGhost;
175 ConstData := ScriptConstList.GetConstByID(ID);
176 pageConstText.ActivePage := tstConst;
177 edtConstCaption.Text := ConstData.Caption;
178 edtConstScript.Text := ConstData.ConstText;
179 cbxConstShortCut.Text := ShortCutToText(ConstData.ShortCut);
185 procedure TfrmConstEditor.FormCreate(Sender: TObject);
189 if Application.Terminated then Exit;
190 //
\83\81\83j
\83\85\81[
\8dì
\90¬
191 for c := 'A' to 'Z' do begin
192 cbxConstShortCut.Items.Add('Ctrl+' + c);
194 for c := 'A' to 'Z' do begin
195 cbxConstShortCut.Items.Add('Shift+Ctrl+' + c);
197 for c := 'A' to 'Z' do begin
198 cbxConstShortCut.Items.Add('Alt+Ctrl+' + c);
200 for i := 1 to 12 do begin
201 cbxConstShortCut.Items.Add('F' + IntToStr(i));
203 for i := 1 to 12 do begin
204 cbxConstShortCut.Items.Add('Shift+F' + IntToStr(i));
206 tvwConst.DoubleBuffered := true;
209 procedure TfrmConstEditor.PopUpMenuPopup(Sender: TObject);
211 tvwConst.Selected.Selected := true;
214 procedure TfrmConstEditor.btnCloseClick(Sender: TObject);
219 procedure TfrmConstEditor.UpdateList;
221 MenuNode, ConstNode: TTreeNode;
223 tvwConst.OnChanging := nil;
224 tvwConst.Items.BeginUpdate;
225 for i := tvwConst.Items.Count-1 downto 0 do begin
226 tvwConst.Items[i].Delete;
228 if FTargetConstFile <> nil then begin
230 for i := 0 to FTargetConstFile.Count-1 do begin
231 MenuNode := tvwConst.Items.Add(MenuNode, FTargetConstFile[i].Caption);
232 if FTargetConstFile[i].IfGhost <> '' then begin
233 MenuNode.ImageIndex := IcoIfGhostGroup;
234 MenuNode.SelectedIndex := IcoIfGhostGroup;
236 MenuNode.ImageIndex := IcoGroup;
237 MenuNode.SelectedIndex := IcoGroup;
239 MenuNode.Data := Pointer(FTargetConstFile[i].ID);
240 for j := 0 to FTargetConstFile[i].Count-1 do begin
241 ConstNode := tvwConst.Items.AddChild(MenuNode, FTargetConstFile[i][j].Caption);
242 ConstNode.ImageIndex := IcoConst;
243 ConstNode.SelectedIndex := IcoConst;
244 ConstNode.Data := Pointer(FTargetConstFile[i][j].ID);
246 MenuNode.Expand(false);
249 tvwConst.Items.EndUpdate;
250 if tvwConst.Items.Count > 0 then tvwConst.Items[0].Selected := true;
251 tvwConst.OnChanging := tvwConstChanging;
254 procedure TfrmConstEditor.tvwConstChanging(Sender: TObject;
255 Node: TTreeNode; var AllowChange: Boolean);
256 var ConstData: TScriptConst;
257 MenuData: TScriptConstMenu;
260 //
\91I
\91ð
\82ª
\88Ú
\93®
\82·
\82é
\82Ü
\82¦
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\83f
\81[
\83^
\82ð
\8dX
\90V
\82·
\82é
261 if FTargetItemID = 0 then Exit; //
\88È
\91O
\82É
\89½
\82à
\91I
\91ð
\82µ
\82Ä
\82¢
\82È
\82¢
\82Ì
\82È
\82ç
\89½
\82à
\82µ
\82È
\82¢
263 ConstData := ScriptConstList.GetConstByID(FTargetItemID);
264 CanUpdate := false; //
\83t
\83\89\83O
265 if ConstData <> nil then begin
266 if edtConstCaption.Text <> ConstData.Caption then CanUpdate := true;
267 if edtConstScript.Text <> ConstData.ConstText then CanUpdate := true;
268 if TextToShortCut(cbxConstShortCut.Text) <> ConstData.ShortCut then CanUpdate := true;
269 if edtConstCaption.Text = '' then CanUpdate := false;
270 if edtConstScript.Text = '' then CanUpdate := false;
271 if CanUpdate then begin
272 ConstData.Caption := edtConstCaption.Text;
273 ConstData.ConstText := edtConstScript.Text;
275 ConstData.ShortCut := TextToShortCut(cbxConstShortCut.Text);
277 ConstData.ShortCut := 0;
279 GetNodeByID(FTargetItemID).Text := ConstData.Caption;
282 MenuData := ScriptConstList.GetMenuByID(FTargetItemId);
283 if edtMenuCaption.Text <> MenuData.Caption then CanUpdate := true;
284 if edtMenuIfGhost.Text <> MenuData.IfGhost then CanUpdate := true;
285 if edtMenuCaption.Text = '' then CanUpdate := false;
286 if CanUpdate then begin
287 MenuData.Caption := edtMenuCaption.Text;
288 MenuData.IfGhost := edtMenuIfGhost.Text;
289 with GetNodeByID(FTargetItemID) do begin
290 Text := MenuData.Caption;
291 if MenuData.IfGhost <> '' then begin
292 ImageIndex := IcoIfGhostGroup;
293 SelectedIndex := IcoIfGhostGroup;
295 ImageIndex := IcoGroup;
296 SelectedIndex := IcoGroup;
303 function TfrmConstEditor.GetNodeByID(ID: integer): TTreeNode;
307 for i := 0 to tvwConst.Items.Count-1 do
308 if integer(tvwConst.Items[i].Data) = ID then begin
309 Result := tvwConst.Items[i];
314 procedure TfrmConstEditor.cbxConstFileChange(Sender: TObject);
316 FTargetConstFile := ScriptConstList[cbxConstFile.ItemIndex];
320 procedure TfrmConstEditor.actNewGroupExecute(Sender: TObject);
321 var MenuData: TScriptConstMenu;
324 MenuData := FTargetConstFile.AddMenu;
325 Node := tvwConst.Items.Add(nil, MenuData.Caption);
326 Node.Data := Pointer(MenuData.ID);
327 Node.Selected := true;
328 edtMenuCaption.SetFocus;
329 edtMenuCaption.SelectAll;
332 procedure TfrmConstEditor.actNewConstExecute(Sender: TObject);
333 var ConstData: TScriptConst;
334 MenuData: TScriptConstMenu;
335 MenuNode, NewNode: TTreeNode;
338 if tvwConst.Selected = nil then Exit;
339 if tvwConst.Selected.Level = 0 then MenuNode := tvwConst.Selected
340 else MenuNode := tvwConst.Selected.Parent;
341 ID := integer(MenuNode.Data);
342 MenuData := FTargetConstFile.GetMenuByID(ID);
343 ConstData := MenuData.AddConst;
344 NewNode := tvwConst.Items.AddChild(MenuNode, ConstData.Caption);
345 NewNode.ImageIndex := 1;
346 NewNode.SelectedIndex := 1;
347 NewNode.Data := Pointer(ConstData.ID);
348 NewNode.Selected := true;
349 edtConstCaption.SetFocus;
350 edtConstCaption.SelectAll;
353 procedure TfrmConstEditor.edtExit(Sender: TObject);
356 tvwConstChanging(self, nil, dummy);