OSDN Git Service

TEditor、TTaskTrayの配布先変更に追従
[winbottle/winbottle.git] / bottleclient / ReplacePresetListFrame.pas
1 unit ReplacePresetListFrame;
2
3 interface
4
5 uses
6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7   Dialogs, BottleDef, StrReplace, StdCtrls, ReplacePresetEditor, Menus;
8
9 type
10   TfrmReplacePresetList = class(TFrame)
11     lstPresets: TListBox;
12     btnMoveUp: TButton;
13     btnMoveDown: TButton;
14     btnEdit: TButton;
15     btnClone: TButton;
16     btnDelete: TButton;
17     btnAdd: TButton;
18     procedure btnMoveUpClick(Sender: TObject);
19     procedure btnMoveDownClick(Sender: TObject);
20     procedure btnEditClick(Sender: TObject);
21     procedure btnCloneClick(Sender: TObject);
22     procedure btnDeleteClick(Sender: TObject);
23     procedure btnAddClick(Sender: TObject);
24     procedure lstPresetsDrawItem(Control: TWinControl; Index: Integer;
25       Rect: TRect; State: TOwnerDrawState);
26     procedure lstPresetsDblClick(Sender: TObject);
27   protected
28     procedure MoveItem(const Delta: Integer);
29   public
30     procedure UpdateControls;
31   end;
32
33 implementation
34
35 {$R *.dfm}
36
37 { TfrmReplacePresetList }
38
39 procedure TfrmReplacePresetList.UpdateControls;
40 var
41   i: Integer;
42   Presets: TReplacePresetCollection;
43 begin
44   Presets := Pref.ReplacePresets.Presets;
45   with lstPresets.Items do
46   begin
47     BeginUpdate;
48     try
49       Clear;
50       for i := 0 to Presets.Count-1 do
51       begin
52         Add(Presets[i].Title);
53       end;
54     finally
55       EndUpdate;
56     end;
57   end;
58 end;
59
60 procedure TfrmReplacePresetList.btnMoveUpClick(Sender: TObject);
61 begin
62   MoveItem(-1);
63 end;
64
65 procedure TfrmReplacePresetList.btnMoveDownClick(Sender: TObject);
66 begin
67   MoveItem(1);
68 end;
69
70 procedure TfrmReplacePresetList.MoveItem(const Delta: Integer);
71 var
72   TargetIndex: Integer;
73   Presets: TReplacePresetCollection;
74   Item: TReplacePreset;
75 begin
76   TargetIndex := lstPresets.ItemIndex;
77   if TargetIndex < 0 then
78     Exit;
79   if (TargetIndex + Delta < 0) or (TargetIndex + Delta >= lstPresets.Count) then
80     Exit;
81   Presets := Pref.ReplacePresets.Presets;
82   // \88ê\92U\83A\83C\83e\83\80\82ð\94²\82«\8fo\82·
83   Item := Presets[TargetIndex];
84   Item.Collection := nil; // \82±\82ê\82Å\83R\83\8c\83N\83V\83\87\83\93\82©\82ç\8aO\82ê\82é
85   // \90V\82µ\82¢\8fê\8f\8a\82É\83A\83C\83e\83\80\82ð\8dì\82Á\82Ä\91ã\93ü\82·\82é
86   Presets.Insert(TargetIndex + Delta).Assign(Item);
87   lstPresets.Items.Move(TargetIndex, TargetIndex + Delta);
88   lstPresets.ItemIndex := TargetIndex + Delta;
89 end;
90
91 procedure TfrmReplacePresetList.btnEditClick(Sender: TObject);
92 var
93   Target: TReplacePreset;
94   Index: Integer;
95   Form: TfrmReplacePresetEditor;
96 begin
97   Index := lstPresets.ItemIndex;
98   if Index < 0 then
99     Exit;
100   Target := Pref.ReplacePresets.Presets[Index];
101   Application.CreateForm(TfrmReplacePresetEditor, Form);
102   try
103     with Form do
104     begin
105       AskForTitle := true;
106       Title    := Target.Title;
107       ShortCut := Target.ShortCut;
108       Pairs    := Target.Pairs;
109       ConfirmAfterReplace := Target.ConfirmAfterReplace;
110       if Execute then
111       begin
112         Target.Title    := Title;
113         Target.ShortCut := ShortCut;
114         Target.Pairs    := Pairs;
115         Target.ConfirmAfterReplace := ConfirmAfterReplace;
116         lstPresets.Invalidate;
117       end;
118     end;
119   finally
120     Form.Release;
121   end;
122 end;
123
124 procedure TfrmReplacePresetList.btnCloneClick(Sender: TObject);
125 var
126   Index: Integer;
127   Target, New: TReplacePreset;
128 begin
129   Index := lstPresets.ItemIndex;
130   if Index < 0 then
131     Exit;
132   Target := Pref.ReplacePresets.Presets[Index];
133   New := Pref.ReplacePresets.Presets.Add;
134   New.Assign(Target);
135   New.Title := Target.Title + '\82Ì\83R\83s\81[';
136   lstPresets.Items.Add(New.Title);
137   lstPresets.ItemIndex := lstPresets.Items.Count-1;
138 end;
139
140 procedure TfrmReplacePresetList.btnDeleteClick(Sender: TObject);
141 var
142   Index: Integer;
143   Target: TReplacePreset;
144 begin
145   Index := lstPresets.ItemIndex;
146   if Index < 0 then
147     Exit;
148   Target := Pref.ReplacePresets.Presets[Index];
149   Target.Free; // \8f\9f\8eè\82É\83R\83\8c\83N\83V\83\87\83\93\82Ì\83\8a\83X\83g\82©\82ç\8aO\82ê\82é
150   lstPresets.Items.Delete(Index);
151 end;
152
153 procedure TfrmReplacePresetList.btnAddClick(Sender: TObject);
154 var
155   New: TReplacePreset;
156   Form: TfrmReplacePresetEditor;
157 begin
158   New := TReplacePreset.Create(nil);
159   try
160     Application.CreateForm(TfrmReplacePresetEditor, Form);
161     try
162       with Form do
163       begin
164         AskForTitle := true;
165         Title    := '\96¼\8fÌ\96¢\90Ý\92è';
166         if Execute then
167         begin
168           New.Title    := Title;
169           New.ShortCut := ShortCut;
170           New.Pairs    := Pairs;
171           New.ConfirmAfterReplace := ConfirmAfterReplace;
172           Pref.ReplacePresets.Presets.Add.Assign(New);
173           lstPresets.Items.Add(New.Title);
174         end;
175       end;
176     finally
177       Form.Release;
178     end;
179   finally
180     New.Free;
181   end;
182 end;
183
184 procedure TfrmReplacePresetList.lstPresetsDrawItem(Control: TWinControl;
185   Index: Integer; Rect: TRect; State: TOwnerDrawState);
186 var
187   Str: string;
188   y, w: Integer;
189   Target: TReplacePreset;
190 begin
191   lstPresets.Canvas.FillRect(Rect);
192
193   // \83e\83L\83X\83g\95`\89æ\97Ì\88æ\82Ì\83}\81[\83W\83\93\82ð\8eæ\82é
194   with Rect do
195   begin
196     Left := Left + 2;
197     Top := Top + 2;
198     Right := Right - 2;
199     Bottom := Bottom - 2;
200   end;
201
202   Target := Pref.ReplacePresets.Presets[Index];
203   with lstPresets.Canvas do
204   begin
205     // \83V\83\87\81[\83g\83J\83b\83g
206     Font.Style := Font.Style + [fsBold];
207     Str := ShortCutToText(Target.ShortCut);
208     if Str <> '' then
209     begin
210       DrawText(Handle, PChar(Str), -1, Rect, DT_RIGHT);
211       w := TextWidth(Str);
212     end else
213       w := 0;
214     // \83^\83C\83g\83\8b
215     Str := Target.Title;
216     Rect.Right := Rect.Right - w - 10;
217     y := DrawText(Handle, PChar(Str), -1, Rect, DT_SINGLELINE or DT_END_ELLIPSIS);
218     // \8fÚ\8d×
219     Font.Style := Font.Style - [fsBold];
220     Str := Target.Pairs.StringExpression;
221     Rect.Top := Rect.Top + y;
222     Rect.Left := Rect.Left + 5;
223     Rect.Right := Rect.Right + w + 10;
224     DrawText(Handle, PChar(Str), -1, Rect,
225       DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL);
226   end;
227 end;
228
229 procedure TfrmReplacePresetList.lstPresetsDblClick(Sender: TObject);
230 begin
231   btnEdit.Click;
232 end;
233
234 end.