Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/FavoriteArrange.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.7 - (show annotations) (download) (as text)
Mon Aug 14 08:22:46 2006 UTC (17 years, 8 months ago) by h677
Branch: MAIN
CVS Tags: v1_54_0_680, v1_54_0_679
Changes since 1.6: +148 -40 lines
File MIME type: text/x-pascal
右クリックメニューで、ソートできる機能を追加

1 unit FavoriteArrange;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, ComCtrls, StdCtrls, ExtCtrls, Favorite, ImgList, NewFavoriteFolder,
8 GikoSystem, GikoUtil, Menus;
9
10 type
11 TFavoriteArrangeDialog = class(TForm)
12 Panel1: TPanel;
13 Panel2: TPanel;
14 Panel3: TPanel;
15 Label1: TLabel;
16 DeleteButton: TButton;
17 RenameButton: TButton;
18 NewFolderButton: TButton;
19 FolderTreeView: TTreeView;
20 Panel4: TPanel;
21 CloseButton: TButton;
22 SortPopupMenu: TPopupMenu;
23 SortAscName: TMenuItem;
24 SortDscName: TMenuItem;
25 N1: TMenuItem;
26 SortURL: TMenuItem;
27 SortAscURL: TMenuItem;
28 SortDscURL: TMenuItem;
29 SortTitle: TMenuItem;
30 SortAscTitle: TMenuItem;
31 SortDscTitle: TMenuItem;
32 procedure CloseButtonClick(Sender: TObject);
33 procedure FormCreate(Sender: TObject);
34 procedure NewFolderButtonClick(Sender: TObject);
35 procedure RenameButtonClick(Sender: TObject);
36 procedure DeleteButtonClick(Sender: TObject);
37 procedure FolderTreeViewEdited(Sender: TObject; Node: TTreeNode;
38 var S: String);
39 procedure FolderTreeViewDragOver(Sender, Source: TObject; X,
40 Y: Integer; State: TDragState; var Accept: Boolean);
41 procedure FolderTreeViewDragDrop(Sender, Source: TObject; X,
42 Y: Integer);
43 procedure FormDestroy(Sender: TObject);
44 procedure SortDscNameClick(Sender: TObject);
45 procedure SortAscNameClick(Sender: TObject);
46 procedure SortDscURLClick(Sender: TObject);
47 procedure SortAscURLClick(Sender: TObject);
48 procedure SortDscTitleClick(Sender: TObject);
49 procedure SortAscTitleClick(Sender: TObject);
50 private
51 { Private 鐃緒申鐃緒申 }
52 FDeleteList: TList;
53 procedure SetDeleteItemList(Node: TTreeNode);
54 public
55 { Public 鐃緒申鐃緒申 }
56 end;
57
58 var
59 FavoriteArrangeDialog: TFavoriteArrangeDialog;
60
61 function SortProc(Node1, Node2: TTreeNode; Data: Longint): Integer; stdcall;
62
63 implementation
64
65 uses Giko;
66
67 const
68 SORT_ASC = 0;
69 SORT_DSC = 1;
70 SORT_NAME = 8;
71 SORT_URL = 16;
72 SORT_TITLE = 32;
73
74 {$R *.dfm}
75
76 procedure TFavoriteArrangeDialog.CloseButtonClick(Sender: TObject);
77 begin
78 Close;
79 end;
80
81 procedure TFavoriteArrangeDialog.FormCreate(Sender: TObject);
82 begin
83 FDeleteList := TList.Create;
84 FolderTreeView.Items := FavoriteDM.TreeView.Items;
85
86 if FolderTreeView.Items.GetFirstNode <> nil then begin
87 FolderTreeView.Items.GetFirstNode.Expanded := True;
88 FolderTreeView.Items.GetFirstNode.Selected := True;
89 end;
90 end;
91
92 procedure TFavoriteArrangeDialog.NewFolderButtonClick(Sender: TObject);
93 var
94 Dlg: TNewFavoriteFolderDialog;
95 NewFavFolder: TFavoriteFolder;
96 Node: TTreeNode;
97 begin
98 if FolderTreeView.Selected = nil then
99 Exit;
100 Dlg := TNewFavoriteFolderDialog.Create(Self);
101 try
102 Dlg.ShowModal;
103 if Dlg.ModalResult = mrOK then begin
104 if Length(Dlg.FolderEdit.Text) = 0 then
105 Exit;
106 if not (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then
107 FolderTreeView.Selected := FolderTreeView.Selected.Parent;
108
109 NewFavFolder := TFavoriteFolder.Create;
110 Node := FolderTreeView.Items.AddChildObject(FolderTreeView.Selected, Dlg.FolderEdit.Text, NewFavFolder);
111 Node.ImageIndex := 14;
112 Node.SelectedIndex := 14;
113 // FolderTreeView.Selected.Expanded := True;
114 FolderTreeView.Selected := Node;
115 end;
116 finally
117 Dlg.Release;
118 end;
119 end;
120
121 procedure TFavoriteArrangeDialog.RenameButtonClick(Sender: TObject);
122 begin
123 if FolderTreeView.Selected = nil then
124 Exit;
125 if FolderTreeView.Selected.IsFirstNode then
126 Exit;
127 if FolderTreeView.Selected.Text = Favorite.FAVORITE_LINK_NAME then
128 Exit;
129 FolderTreeView.ReadOnly := False;
130 FolderTreeView.Selected.EditText;
131 end;
132
133 procedure TFavoriteArrangeDialog.DeleteButtonClick(Sender: TObject);
134 const
135 DEL_LINK_MSG = '鐃?鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
136 DEL_MSG = '鐃?^0鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
137 DEL_TITLE = '鐃緒申鐃緒申鐃?鐃?';
138 begin
139 if FolderTreeView.Selected = nil then
140 Exit;
141 if FolderTreeView.Selected.IsFirstNode then
142 Exit;
143 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then begin
144 if FolderTreeView.Selected.Text = Favorite.FAVORITE_LINK_NAME then begin
145 if MsgBox(Handle, DEL_LINK_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
146 Exit;
147 end else begin
148 if MsgBox(Handle, StringReplace( DEL_MSG, '^0', FolderTreeView.Selected.Text, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
149 Exit;
150 end;
151 end;
152
153 FDeleteList.Add(FolderTreeView.Selected.Data);
154 SetDeleteItemList(FolderTreeView.Selected);
155
156 FolderTreeView.Selected.Delete;
157 end;
158
159 procedure TFavoriteArrangeDialog.FolderTreeViewEdited(Sender: TObject;
160 Node: TTreeNode; var S: String);
161 begin
162 FolderTreeView.ReadOnly := True;
163 end;
164
165 procedure TFavoriteArrangeDialog.FolderTreeViewDragOver(Sender,
166 Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
167 begin
168 if Source = FolderTreeView then begin
169 if FolderTreeView.Selected = FolderTreeView.Items.GetFirstNode then begin
170 Accept := False;
171 Exit;
172 end;
173 Accept := True;
174 end else
175 Accept := False;
176 end;
177
178 procedure TFavoriteArrangeDialog.FolderTreeViewDragDrop(Sender,
179 Source: TObject; X, Y: Integer);
180 begin
181 if FolderTreeView.GetNodeAt(X, Y) = nil then
182 Exit;
183 if Source <> FolderTreeView then
184 Exit;
185 if FolderTreeView.Selected = FolderTreeView.GetNodeAt(X, Y) then
186 Exit;
187
188 if TObject(FolderTreeView.GetNodeAt(X, Y).Data) is TFavoriteFolder then
189 FolderTreeView.Selected.MoveTo(FolderTreeView.GetNodeAt(X, Y), naAddChild)
190 else if TObject(FolderTreeView.GetNodeAt(X, Y).Data) is TFavoriteBoardItem then
191 FolderTreeView.Selected.MoveTo(FolderTreeView.GetNodeAt(X, Y), naInsert)
192 else if TObject(FolderTreeView.GetNodeAt(X, Y).Data) is TFavoriteThreadItem then
193 FolderTreeView.Selected.MoveTo(FolderTreeView.GetNodeAt(X, Y), naInsert);
194 end;
195
196 procedure TFavoriteArrangeDialog.FormDestroy(Sender: TObject);
197 var
198 i: Integer;
199 begin
200 FavoriteDM.TreeView.Items := FolderTreeView.Items;
201
202 for i := FDeleteList.Count - 1 downto 0 do
203 TObject(FDeleteList[i]).Free;
204 FDeleteList.Free;
205 FavoriteDM.WriteFavorite;
206 end;
207
208 procedure TFavoriteArrangeDialog.SetDeleteItemList(Node: TTreeNode);
209 var
210 i: Integer;
211 begin
212 for i := 0 to Node.Count - 1 do begin
213 FDeleteList.Add(Node.Item[i].Data);
214 if Node.Item[i].Count > 0 then
215 SetDeleteItemList(Node.item[i]);
216 end;
217 end;
218 {
219 \brief 鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
220 \pram Node1 鐃?鐃?鐃?
221 \param Node2 鐃?鐃?鐃?
222 \param Data 鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申
223 \return Node1(>0) Node1=Node2(=0) Node2(<0)
224 }
225 function SortProc(Node1, Node2: TTreeNode; Data: Longint): Integer;
226 stdcall;
227 var
228 folder1, folder2 : TFavoriteFolder;
229 item1, item2 : TFavoriteItem;
230 begin
231 if (TObject(Node1.Data) is TFavoriteItem) then begin
232 item1 := TFavoriteItem(Node1.Data);
233 folder1 := nil;
234 end else begin
235 item1 := nil;
236 folder1 := TFavoriteFolder(Node1.Data);
237 end;
238 if (TObject(Node2.Data) is TFavoriteItem) then begin
239 item2 := TFavoriteItem(Node2.Data);
240 folder2 := nil;
241 end else begin
242 item2 := nil;
243 folder2 := TFavoriteFolder(Node2.Data);
244 end;
245
246 if (folder1 <> nil) and (folder2 = nil) then begin
247 Result := 1;
248 end else
249 if (folder1 = nil) and (folder2 <> nil) then begin
250 Result := -1;
251 end else begin
252 if (folder1 <> nil) and (folder2 <> nil) then begin
253 Result := CompareStr(Node1.Text, Node2.Text);
254 end else
255 if (folder1 = nil) and (folder2 = nil) then begin
256 if ((Data and SORT_NAME) > 0) then begin
257 Result := CompareStr(Node1.Text, Node2.Text);
258 end else
259 if ((Data and SORT_URL) > 0) then begin
260 Result := CompareStr(item1.URL, item2.URL);
261 end else
262 if ((Data and SORT_TITLE) > 0) then begin
263 Result := CompareStr(item1.Title, item2.Title);
264 end;
265 end;
266 if ((Data and SORT_DSC) > 0) then begin
267 Result := -1 * Result;
268 end;
269 end;
270 end;
271
272 {
273 \brief 鐃緒申鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃?
274 }
275 procedure TFavoriteArrangeDialog.SortDscNameClick(Sender: TObject);
276 begin
277 if (FolderTreeView.Selected <> nil) and
278 (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
279 FolderTreeView.Selected
280 .CustomSort(@SortProc, SORT_NAME or SORT_DSC, False);
281 end;
282 end;
283
284 {
285 \brief 鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?
286 }
287 procedure TFavoriteArrangeDialog.SortAscNameClick(Sender: TObject);
288 begin
289 if (FolderTreeView.Selected <> nil) and
290 (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
291 FolderTreeView.Selected
292 .CustomSort(@SortProc, SORT_NAME or SORT_ASC, False);
293 end;
294 end;
295 {
296 \brief URL鐃緒申鐃?鐃緒申鐃?鐃?鐃?
297 }
298 procedure TFavoriteArrangeDialog.SortDscURLClick(Sender: TObject);
299 begin
300 if (FolderTreeView.Selected <> nil) and
301 (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
302 FolderTreeView.Selected
303 .CustomSort(@SortProc, SORT_URL or SORT_DSC, False);
304 end;
305 end;
306 {
307 \brief URL鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?
308 }
309 procedure TFavoriteArrangeDialog.SortAscURLClick(Sender: TObject);
310 begin
311 if (FolderTreeView.Selected <> nil) and
312 (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
313 FolderTreeView.Selected
314 .CustomSort(@SortProc, SORT_URL or SORT_ASC, False);
315 end;
316 end;
317 {
318 \brief 鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃?
319 }
320 procedure TFavoriteArrangeDialog.SortDscTitleClick(Sender: TObject);
321 begin
322 if (FolderTreeView.Selected <> nil) and
323 (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
324 FolderTreeView.Selected
325 .CustomSort(@SortProc, SORT_TITLE or SORT_DSC, False);
326 end;
327 end;
328 {
329 \brief 鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?
330 }
331 procedure TFavoriteArrangeDialog.SortAscTitleClick(Sender: TObject);
332 begin
333 if (FolderTreeView.Selected <> nil) and
334 (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
335 FolderTreeView.Selected
336 .CustomSort(@SortProc, SORT_TITLE or SORT_ASC, False);
337 end;
338 end;
339
340 end.
341

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26