source: tags/1.4.0/Forms/UFormCategories.pas

Last change on this file was 148, checked in by chronos, 7 years ago
  • Fixed: Update filtered acronyms in main window if they were changed in acronyms and categories window.
File size: 7.3 KB
Line 
1unit UFormCategories;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
9 ActnList, Menus, UAcronym, UListViewSort;
10
11type
12
13 { TFormCategories }
14
15 TFormCategories = class(TForm)
16 AAdd: TAction;
17 AEnable: TAction;
18 ADisable: TAction;
19 ASelectAll: TAction;
20 ARemove: TAction;
21 AModify: TAction;
22 ActionList1: TActionList;
23 ListViewCategories: TListView;
24 ListViewSort1: TListViewSort;
25 MenuItem1: TMenuItem;
26 MenuItem2: TMenuItem;
27 MenuItem3: TMenuItem;
28 MenuItem4: TMenuItem;
29 MenuItem5: TMenuItem;
30 MenuItem6: TMenuItem;
31 MenuItem7: TMenuItem;
32 PopupMenuCategory: TPopupMenu;
33 ToolBar1: TToolBar;
34 ToolButton1: TToolButton;
35 ToolButton2: TToolButton;
36 ToolButton3: TToolButton;
37 procedure AAddExecute(Sender: TObject);
38 procedure ADisableExecute(Sender: TObject);
39 procedure AEnableExecute(Sender: TObject);
40 procedure AModifyExecute(Sender: TObject);
41 procedure ARemoveExecute(Sender: TObject);
42 procedure ASelectAllExecute(Sender: TObject);
43 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
44 procedure FormCreate(Sender: TObject);
45 procedure FormShow(Sender: TObject);
46 procedure ListViewCategoriesChange(Sender: TObject; Item: TListItem;
47 Change: TItemChange);
48 procedure ListViewCategoriesData(Sender: TObject; Item: TListItem);
49 procedure ListViewCategoriesDblClick(Sender: TObject);
50 procedure ListViewCategoriesKeyPress(Sender: TObject; var Key: char);
51 procedure ListViewCategoriesSelectItem(Sender: TObject; Item: TListItem;
52 Selected: Boolean);
53 function ListViewSort1CompareItem(Item1, Item2: TObject): Integer;
54 procedure ListViewSort1Filter(ListViewSort: TListViewSort);
55 private
56 { private declarations }
57 public
58 Categories: TAcronymCategories;
59 procedure UpdateList;
60 procedure UpdateInterface;
61 end;
62
63var
64 FormCategories: TFormCategories;
65
66implementation
67
68{$R *.lfm}
69
70uses
71 UCore;
72
73resourcestring
74 SCategory = 'Category';
75 SCategoryQuery = 'Enter name of category';
76 SRemoveCategory = 'Remove categories';
77 SRemoveCategoryQuery = 'Do you really want to remove selected categories?';
78 SCategoryAlreadyExists = 'Category %s already exists!';
79
80{ TFormCategories }
81
82procedure TFormCategories.FormShow(Sender: TObject);
83begin
84 Core.PersistentForm1.Load(Self);
85 UpdateList;
86 Core.ScaleDPI1.ScaleControl(ToolBar1, Core.ScaleDPI1.DesignDPI);
87end;
88
89procedure TFormCategories.ListViewCategoriesChange(Sender: TObject;
90 Item: TListItem; Change: TItemChange);
91begin
92 if Assigned(Item) and (Change = ctState) then begin
93 TAcronymCategory(Item.Data).Enabled := Item.Checked;
94 Core.AcronymDb.Modified := True;
95 end;
96end;
97
98procedure TFormCategories.AAddExecute(Sender: TObject);
99var
100 S: string;
101begin
102 S := InputBox(SCategory, SCategoryQuery, '');
103 if S <> '' then begin
104 if not Assigned(Core.AcronymDb.Categories.SearchByName(S)) then begin;
105 TAcronymCategory(Core.AcronymDb.Categories[Core.AcronymDb.Categories.Add(TAcronymCategory.Create)]).Name := S;
106 Core.AcronymDb.Modified := True;
107 Core.AcronymDb.Update;
108 UpdateList;
109 end else ShowMessage(Format(SCategoryAlreadyExists, [S]));
110 end;
111end;
112
113procedure TFormCategories.ADisableExecute(Sender: TObject);
114var
115 I: Integer;
116begin
117 for I := ListViewCategories.Items.Count - 1 downto 0 do
118 if ListViewCategories.Items[I].Selected then begin
119 TAcronymCategory(ListViewCategories.Items[I].Data).Enabled := False;
120 Core.AcronymDb.Modified := True;
121 end;
122 UpdateList;
123end;
124
125procedure TFormCategories.AEnableExecute(Sender: TObject);
126var
127 I: Integer;
128begin
129 for I := ListViewCategories.Items.Count - 1 downto 0 do
130 if ListViewCategories.Items[I].Selected then begin
131 TAcronymCategory(ListViewCategories.Items[I].Data).Enabled := True;
132 Core.AcronymDb.Modified := True;
133 end;
134 UpdateList;
135end;
136
137procedure TFormCategories.AModifyExecute(Sender: TObject);
138var
139 S: string;
140begin
141 if Assigned(ListViewCategories.Selected) then begin
142 S := InputBox(SCategory, SCategoryQuery, ListViewCategories.Selected.Caption);
143 if S <> ListViewCategories.Selected.Caption then begin
144 if not Assigned(Core.AcronymDb.Categories.SearchByName(S)) then begin;
145 TAcronymCategory(ListViewCategories.Selected.Data).Name := S;
146 Core.AcronymDb.Modified := True;
147 Core.AcronymDb.Update;
148 UpdateList;
149 end else ShowMessage(Format(SCategoryAlreadyExists, [S]));
150 end;
151 end;
152end;
153
154procedure TFormCategories.ARemoveExecute(Sender: TObject);
155var
156 I: Integer;
157begin
158 if Assigned(ListViewCategories.Selected) then begin
159 if MessageDlg(SRemoveCategory, SRemoveCategoryQuery,
160 TMsgDlgType.mtConfirmation, [mbCancel, mbOk], 0) = mrOk then begin
161 Categories.Db.BeginUpdate;
162 for I := ListViewCategories.Items.Count - 1 downto 0 do
163 if ListViewCategories.Items[I].Selected then
164 Categories.Remove(ListViewCategories.Items[I].Data);
165 Categories.Db.EndUpdate;
166 UpdateList;
167 end;
168 end;
169end;
170
171procedure TFormCategories.ASelectAllExecute(Sender: TObject);
172var
173 I: Integer;
174begin
175 for I := 0 to ListViewCategories.Items.Count - 1 do
176 ListViewCategories.Items[I].Selected := True;
177end;
178
179procedure TFormCategories.FormClose(Sender: TObject;
180 var CloseAction: TCloseAction);
181begin
182 Core.PersistentForm1.Save(Self);
183end;
184
185procedure TFormCategories.FormCreate(Sender: TObject);
186var
187 I: Integer;
188begin
189 Core.CoolTranslator1.TranslateComponentRecursive(Self);
190 for I := 0 to ToolBar1.ButtonCount - 1 do
191 ToolBar1.Buttons[I].Hint := ToolBar1.Buttons[I].Caption;
192end;
193
194procedure TFormCategories.ListViewCategoriesData(Sender: TObject; Item: TListItem);
195begin
196 if Item.Index < ListViewSort1.List.Count then
197 with TAcronymCategory(ListViewSort1.List[Item.Index]) do begin
198 Item.Caption := Name;
199 Item.Data := ListViewSort1.List[Item.Index];
200 Item.SubItems.Add(IntToStr(AcronymMeanings.Count));
201 Item.Checked := Enabled;
202 end;
203end;
204
205procedure TFormCategories.ListViewCategoriesDblClick(Sender: TObject);
206begin
207 AModify.Execute;
208end;
209
210procedure TFormCategories.ListViewCategoriesKeyPress(Sender: TObject;
211 var Key: char);
212begin
213 if Key = #27 then Close;
214end;
215
216procedure TFormCategories.ListViewCategoriesSelectItem(Sender: TObject; Item: TListItem;
217 Selected: Boolean);
218begin
219 UpdateInterface;
220end;
221
222function TFormCategories.ListViewSort1CompareItem(Item1, Item2: TObject
223 ): Integer;
224begin
225 Result := 0;
226 if Assigned(Item1) and Assigned(Item2) and (ListViewSort1.Order <> soNone) then begin
227 with ListViewSort1 do
228 case Column of
229 0: Result := CompareString(TAcronymCategory(Item1).Name, TAcronymCategory(Item2).Name);
230 1: Result := CompareInteger(TAcronymCategory(Item1).AcronymMeanings.Count, TAcronymCategory(Item2).AcronymMeanings.Count);
231 end;
232 if ListViewSort1.Order = soDown then Result := -Result;
233 end else Result := 0;
234end;
235
236procedure TFormCategories.ListViewSort1Filter(ListViewSort: TListViewSort);
237begin
238 Core.AcronymDb.Categories.AssignToList(ListViewSort1.List);
239end;
240
241procedure TFormCategories.UpdateList;
242begin
243 ListViewSort1.Refresh;
244 ListViewCategories.Items.Count := Core.AcronymDb.Categories.Count;
245 ListViewCategories.Refresh;
246 UpdateInterface;
247end;
248
249procedure TFormCategories.UpdateInterface;
250begin
251 ARemove.Enabled := Assigned(ListViewCategories.Selected);
252 AModify.Enabled := Assigned(ListViewCategories.Selected);
253end;
254
255end.
256
Note: See TracBrowser for help on using the repository browser.