OSDN Git Service

入力アシストのキー更新時にも重複チェックを入れた。
[gikonavigoeson/gikonavi.git] / InputAssist.pas
1 unit InputAssist;
2
3 interface
4
5 uses
6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7   Dialogs, StdCtrls, ComCtrls, GikoListView, Menus, ExtCtrls, ImgList,
8   InputAssistDataModule, StdActns, ActnList, GikoSystem;
9
10 type
11   TInputAssistForm = class(TForm)
12     Panel1: TPanel;
13     Panel2: TPanel;
14     GikoListView1: TGikoListView;
15     Panel3: TPanel;
16         Panel4: TPanel;
17         TextMemo: TMemo;
18     ColumnImageList: TImageList;
19     InputAssistFormActionList: TActionList;
20     EditCut1: TEditCut;
21     EditCopy1: TEditCopy;
22     EditPaste1: TEditPaste;
23     EditSelectAll1: TEditSelectAll;
24     EditUndo1: TEditUndo;
25     EditDelete1: TEditDelete;
26     GroupBox1: TGroupBox;
27     Panel5: TPanel;
28     CloseButton: TButton;
29     ApplyButton: TButton;
30     DeleteButton: TButton;
31     AddButton: TButton;
32     Panel6: TPanel;
33     Panel7: TPanel;
34     CategoryComboBox: TComboBox;
35     CategoryComboLabel: TLabel;
36     InsertButton: TButton;
37     InsertButtonAction: TAction;
38     CloseAction: TAction;
39     KeyPanel: TPanel;
40     KeyNameEdit: TLabeledEdit;
41     Splitter: TSplitter;
42     CategoryPanel: TPanel;
43     CategoryNameComboBox: TComboBox;
44     CategoryNameLabel: TLabel;
45     procedure FormCreate(Sender: TObject);
46     procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem;
47       Selected: Boolean);
48     procedure AddButtonClick(Sender: TObject);
49     procedure DeleteButtonClick(Sender: TObject);
50     procedure ApplyButtonClick(Sender: TObject);
51     procedure FormClose(Sender: TObject; var Action: TCloseAction);
52     procedure GikoListView1Compare(Sender: TObject; Item1,
53       Item2: TListItem; Data: Integer; var Compare: Integer);
54     procedure GikoListView1ColumnClick(Sender: TObject;
55       Column: TListColumn);
56     procedure CloseButtonClick(Sender: TObject);
57     procedure CategoryComboBoxKeyPress(Sender: TObject; var Key: Char);
58     procedure CategoryComboBoxChange(Sender: TObject);
59     procedure InsertButtonActionUpdate(Sender: TObject);
60     procedure InsertButtonActionExecute(Sender: TObject);
61     procedure CloseActionExecute(Sender: TObject);
62   private
63         { Private \90é\8c¾ }
64         FSortColumn : Integer;
65         FInsertText : String;
66         procedure AddListViewItem(ResWord : TResistWord);
67     procedure SetCategory(combo: TComboBox);
68   public
69         { Public \90é\8c¾ }
70         procedure SetUpFromEditor();
71         procedure SetUpFromMain();
72         function GetInsertText(): String;
73   end;
74
75 var
76   InputAssistForm: TInputAssistForm;
77
78 implementation
79
80 uses Setting, MojuUtils;
81
82
83 {$R *.dfm}
84 //! \83t\83H\81[\83\80\90\90¬\82Ì\83C\83x\83\93\83g
85 procedure TInputAssistForm.FormCreate(Sender: TObject);
86 var
87         wp: TWindowPlacement;
88         i : Integer;
89         column: TListColumn;
90 begin
91         //\83E\83B\83\93\83h\83E\82Ì\88Ê\92u\90Ý\92è
92         wp.length := sizeof(wp);
93         wp.rcNormalPosition.Top := GikoSys.Setting.InputAssistFormTop;
94         wp.rcNormalPosition.Left := GikoSys.Setting.InputAssistFormLeft;
95
96         wp.rcNormalPosition.Bottom := GikoSys.Setting.InputAssistFormTop
97                                                                         + GikoSys.Setting.InputAssistFormHeight;
98         wp.rcNormalPosition.Right := GikoSys.Setting.InputAssistFormLeft
99                                                                         + GikoSys.Setting.InputAssistFormWidth;
100         wp.showCmd := SW_HIDE;
101         SetWindowPlacement(Handle, @wp);
102
103         FSortColumn := 0;
104         GikoListView1.Columns.Clear;
105         column := GikoListView1.Columns.Add;
106         column.ImageIndex := 0;
107         column.Caption := '\83L\81[';
108         column.Width := 150;
109         column := GikoListView1.Columns.Add;
110         column.Caption := '\83J\83e\83S\83\8a';
111         column.Width := 80;
112         for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
113                 AddListViewItem(InputAssistDM.GetResistWord(i));
114         end;
115         //\83\\81[\83g\8fó\91Ô\82ð\89ð\8f\9c (\89ð\8f\9c\82µ\82È\82¢\82Æ\83A\83C\83e\83\80\82Ì\83L\81[\96¼\82ð\95Ï\8dX\82Å\82«\82È\82¢)
116         InputAssistDM.Sorted := False;
117 end;
118 //! \88ê\97\97\82É\83A\83C\83e\83\80\82ð\92Ç\89Á\82·\82é\8f\88\97\9d
119 procedure TInputAssistForm.AddListViewItem(ResWord : TResistWord);
120 var
121         item: TListItem;
122 begin
123         item := GikoListView1.Items.Add;
124         item.ImageIndex := -1;
125         item.Caption := resWord.GetKey;
126         item.SubItems.Add(resWord.GetCategory);
127         item.Data := resWord;
128 end;
129 //! \93o\98^\92P\8cê\88ê\97\97\82©\82ç\83A\83C\83e\83\80\82ð\91I\91ð\82µ\82½\82Æ\82«\82Ì\83C\83x\83\93\83g
130 procedure TInputAssistForm.GikoListView1SelectItem(Sender: TObject;
131   Item: TListItem; Selected: Boolean);
132 begin
133         if (Item <> nil) and (Item.Data <> nil) then begin
134                 KeyNameEdit.Text := TResistWord(Item.Data).GetKey;
135         CategoryNameComboBox.Text := TResistWord(Item.Data).GetCategory;
136                 TextMemo.Lines.Text := TResistWord(Item.Data).GetText;
137         end else begin
138                 TextMemo.Lines.Text := '';
139         end;
140 end;
141 //! \92Ç\89Á\83{\83^\83\93\89\9f\89º\8e\9e\82Ì\83C\83x\83\93\83g
142 procedure TInputAssistForm.AddButtonClick(Sender: TObject);
143 var
144         resWord : TResistWord;
145 begin
146         if (Length(KeyNameEdit.Text) = 0) then begin
147                 ShowMessage('\83L\81[\96¼\82ð\90Ý\92è\82µ\82Ä\82­\82¾\82³\82¢\81B');
148         end else begin
149                 if (not InputAssistDM.IsDupulicate(
150                         KeyNameEdit.Text, CategoryNameComboBox.Text) ) then begin
151                         resWord := InputAssistDM.Add(KeyNameEdit.Text);
152                         resWord.SetCategory(CategoryNameComboBox.Text);
153                         resWord.SetText(TextMemo.Text);
154                         AddListViewItem(resWord);
155             SetCategory(CategoryNameComboBox);
156                         GikoListView1.AlphaSort;
157                 end else begin
158                         ShowMessage('\93¯\88ê\82Ì\83L\81[\96¼\81E\83J\83e\83S\83\8a\96¼\82Å\8aù\82É\93o\98^\8dÏ\82Ý\82Å\82·\81B');
159                 end;
160         end;
161 end;
162 //! \8dí\8f\9c\83{\83^\83\93\89\9f\89º\8e\9e\82Ì\83C\83x\83\93\83g
163 procedure TInputAssistForm.DeleteButtonClick(Sender: TObject);
164 begin
165         if GikoListView1.Selected <> nil then begin
166                 InputAssistDM.DeleteResistWord(GikoListView1.Selected.Data);
167                 GikoListView1.Selected.Data := nil;
168                 GikoListView1.DeleteSelected;
169         end;
170 end;
171 //! \93K\97p\83{\83^\83\93\89\9f\89º\8e\9e\82Ì\83C\83x\83\93\83g
172 procedure TInputAssistForm.ApplyButtonClick(Sender: TObject);
173 var
174         resWord : TResistWord;
175 begin
176         if GikoListView1.Selected <> nil then begin
177                 if (Length(KeyNameEdit.Text) = 0) then begin
178                         ShowMessage('\83L\81[\96¼\82ð\96³\82µ\82É\82Í\82Å\82«\82Ü\82¹\82ñ\81B');
179                 end else begin
180             if (not InputAssistDM.IsDupulicate(
181                         KeyNameEdit.Text, CategoryNameComboBox.Text) ) then begin
182                         resWord := TResistWord(GikoListView1.Selected.Data);
183                         resWord.SetKey(KeyNameEdit.Text);
184                             resWord.SetCategory(CategoryNameComboBox.Text);
185                         resWord.SetText(TextMemo.Text);
186                         // \88ê\97\97\82Ì\8dX\90V
187                             GikoListView1.Selected.Caption := resWord.GetKey;
188                         GikoListView1.Selected.SubItems[0] := resWord.GetCategory;
189                 SetCategory(CategoryNameComboBox);
190                         GikoListView1.AlphaSort;
191                 end else begin
192                         ShowMessage('\93¯\88ê\82Ì\83L\81[\96¼\81E\83J\83e\83S\83\8a\96¼\82Å\8aù\82É\93o\98^\8dÏ\82Ý\82Å\82·\81B');
193                     end;
194                 end;
195         end;
196 end;
197 //! \83t\83H\81[\83\80\82ð\95Â\82\82é\82Æ\82«\82Ì\83C\83x\83\93\83g
198 procedure TInputAssistForm.FormClose(Sender: TObject;
199   var Action: TCloseAction);
200 begin
201         GikoSys.Setting.InputAssistFormTop := Self.Top;
202         GikoSys.Setting.InputAssistFormLeft := Self.Left;
203         GikoSys.Setting.InputAssistFormHeight := Self.Height;
204         GikoSys.Setting.InputAssistFormWidth := Self.Width;
205         //\83\\81[\83g\8fó\91Ô\82Ì\90Ý\92è
206         InputAssistDM.Sorted := True;
207 end;
208 //! \93o\98^\92P\8cê\88ê\97\97\82Ì\83\\81[\83g\97p\82Ì\94ä\8ar\8f\88\97\9d
209 procedure TInputAssistForm.GikoListView1Compare(Sender: TObject; Item1,
210   Item2: TListItem; Data: Integer; var Compare: Integer);
211 begin
212         if ((FSortColumn and 2) > 0) then begin
213                 // \83J\83e\83S\83\8a\82Å\83\\81[\83g
214                 Compare := CompareStr(
215                         ZenToHan(Item1.SubItems[0]), ZenToHan(Item2.SubItems[0]));
216                 if (Compare = 0) then begin
217                         Compare := CompareStr(
218                                 ZenToHan(Item1.Caption), ZenToHan(Item2.Caption));
219                 end;
220         end else begin
221                 // \83L\81[\82Å\83\\81[\83g
222                 Compare := CompareStr(
223                         ZenToHan(Item1.Caption), ZenToHan(Item2.Caption));
224                 if (Compare = 0) then begin
225                         Compare := CompareStr(
226                                 ZenToHan(Item1.SubItems[0]), ZenToHan(Item2.SubItems[0]));
227                 end;
228         end;
229         // \8f¸\8f\87\8d~\8f\87\82Ì\94½\93]
230         if ((FSortColumn and 1) > 0) then begin
231                 Compare := Compare * -1;
232         end;
233         ;
234 end;
235 //! \93o\98^\92P\8cê\88ê\97\97\82Ì\83\8a\83X\83g\82Ì\83J\83\89\83\80\83N\83\8a\83b\83N\83C\83x\83\93\83g
236 procedure TInputAssistForm.GikoListView1ColumnClick(Sender: TObject;
237   Column: TListColumn);
238 var
239         i : Integer;
240 begin
241         if Column <> nil then begin
242                 // \83C\83\81\81[\83W\82Ì\8dí\8f\9c
243                 for i := 0 to GikoListView1.Columns.Count - 1 do begin
244                         GikoListView1.Column[i].ImageIndex := -1;
245                 end;
246
247                 // FSortColumn \8bô\90\94:\8f¸\8f\87 \8aï\90\94\81F\8d~\8f\87
248                 if Column.Caption = '\83L\81[' then begin
249                         if FSortColumn = 0 then begin
250                                 FSortColumn := 1;
251                         end else begin
252                                 FSortColumn := 0;
253                         end;
254                 end else begin
255                         if FSortColumn = 2 then begin
256                                 FSortColumn := 3;
257                         end else begin
258                                 FSortColumn := 2;
259                         end;
260                 end;
261                 Column.ImageIndex := (FSortColumn and 1);
262                 GikoListView1.AlphaSort;
263         end;
264
265 end;
266 //! \8fI\97¹\83{\83^\83\93\82ð\89\9f\89º\8e\9e\82Ì\83C\83x\83\93\83g
267 procedure TInputAssistForm.CloseButtonClick(Sender: TObject);
268 begin
269         Close();
270 end;
271 //! \83J\83e\83S\83\8a\8di\8d\9e\82Ý\83R\83\93\83{\83{\83b\83N\83X\82ð\93Ç\8eæ\90ê\97p\82É\82·\82é\82½\82ß\82Ì\83C\83x\83\93\83g\8f\88\97\9d
272 procedure TInputAssistForm.CategoryComboBoxKeyPress(Sender: TObject;
273   var Key: Char);
274 begin
275         Key := #0;
276 end;
277 //! \83J\83e\83S\83\8a\8di\8d\9e\82Ý\83R\83\93\83{\83{\83b\83N\83X\82Å\82Ì\83J\83e\83S\83\8a\95Ï\8dX\8f\88\97\9d
278 procedure TInputAssistForm.CategoryComboBoxChange(Sender: TObject);
279 var
280         i : Integer;
281         key : String;
282 begin
283         LockWindowUpdate(GikoListView1.Handle);
284         GikoListView1.Clear;
285         if (CategoryComboBox.ItemIndex <= 0) then begin
286                 for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
287                         AddListViewItem(InputAssistDM.GetResistWord(i));
288                 end;
289         end else begin
290                 key := CategoryComboBox.Items[CategoryComboBox.ItemIndex];
291                 for i := 0 to InputAssistDM.ResistWordCount - 1 do begin
292                         if (key = InputAssistDM.GetResistWord(i).GetCategory) then begin
293                                 AddListViewItem(InputAssistDM.GetResistWord(i));
294                         end;
295                 end;
296         end;
297         LockWindowUpdate(0);
298 end;
299 //! \83J\83e\83S\83\8a\83R\83\93\83{\83{\83b\83N\83X\90Ý\92è
300 procedure TInputAssistForm.SetCategory(combo: TComboBox);
301 var
302         cat : TStringList;
303 begin
304         // \8c\9f\8dõ\97p
305         cat := TStringList.Create;
306         try
307                 InputAssistDM.GetCategoryList(cat);
308         combo.Items.BeginUpdate;
309         combo.Items.Clear;
310                 combo.Items.Add('');
311                 combo.Items.AddStrings(cat);
312                 combo.ItemIndex := 0;
313         combo.Items.EndUpdate;
314         finally
315                 cat.Free;
316         end;
317 end;
318
319 procedure TInputAssistForm.SetUpFromMain();
320 begin
321         Self.Caption := '\93ü\97Í\83A\83V\83X\83g\90Ý\92è';
322         Panel3.Visible := True;
323         Panel5.Visible := True;
324         Panel7.Visible := False;
325         TextMemo.ReadOnly := False;
326         FInsertText := '';
327         CloseAction.ShortCut := TShortCut(0);
328         // \92Ç\89Á\97p\83L\81[\93ü\97ÍOK
329     SetCategory(CategoryNameComboBox);
330 end;
331 procedure TInputAssistForm.SetUpFromEditor();
332 var
333         cat : TStringList;
334 begin
335         Self.Caption := '\93ü\97Í\83A\83V\83X\83g';
336         Panel3.Visible := False;
337         Panel5.Visible := False;
338         Panel7.Visible := True;
339         TextMemo.ReadOnly := True;
340         FInsertText := '';
341         CloseAction.ShortCut := ShortCut(VK_ESCAPE, []);
342         // \8c\9f\8dõ\97p
343     SetCategory(CategoryComboBox);
344 end;
345 function TInputAssistForm.GetInsertText(): String;
346 begin
347         Result := FInsertText;
348 end;
349
350 procedure TInputAssistForm.InsertButtonActionUpdate(Sender: TObject);
351 begin
352         InsertButtonAction.Enabled := (GikoListView1.Selected <> nil);
353 end;
354
355 procedure TInputAssistForm.InsertButtonActionExecute(Sender: TObject);
356 begin
357         if (GikoListView1.Selected = nil) then begin
358                 FInsertText := '';
359                 Self.ModalResult := mrNone;
360         end else begin
361                 FInsertText :=  TResistWord(GikoListView1.Selected.Data).GetText;
362                 Self.ModalResult := mrOk;
363         end;
364 end;
365
366 procedure TInputAssistForm.CloseActionExecute(Sender: TObject);
367 begin
368         Self.ModalResult := mrCancel;
369 end;
370 end.