OSDN Git Service

This commit was manufactured by cvs2svn to create branch 'Bdraw'.
[gikonavigoeson/gikonavi.git] / FavoriteArrange.pas
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;
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     procedure CloseButtonClick(Sender: TObject);
23     procedure FormCreate(Sender: TObject);
24     procedure NewFolderButtonClick(Sender: TObject);
25     procedure RenameButtonClick(Sender: TObject);
26     procedure DeleteButtonClick(Sender: TObject);
27     procedure FolderTreeViewEdited(Sender: TObject; Node: TTreeNode;
28       var S: String);
29     procedure FolderTreeViewDragOver(Sender, Source: TObject; X,
30       Y: Integer; State: TDragState; var Accept: Boolean);
31                 procedure FolderTreeViewDragDrop(Sender, Source: TObject; X,
32                         Y: Integer);
33                 procedure FormDestroy(Sender: TObject);
34         private
35                 { Private \90é\8c¾ }
36 //              FDragNode: TTreeNode;
37                 FDeleteList: TList;
38 //              procedure PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
39                 procedure SetDeleteItemList(Node: TTreeNode);
40         public
41                 { Public \90é\8c¾ }
42         end;
43
44 var
45         FavoriteArrangeDialog: TFavoriteArrangeDialog;
46
47 implementation
48
49 uses Giko;
50
51 {$R *.dfm}
52
53 procedure TFavoriteArrangeDialog.CloseButtonClick(Sender: TObject);
54 begin
55         Close;
56 end;
57
58 procedure TFavoriteArrangeDialog.FormCreate(Sender: TObject);
59 begin
60         FDeleteList := TList.Create;
61         FolderTreeView.Items := FavoriteDM.TreeView.Items;
62
63         if FolderTreeView.Items.GetFirstNode <> nil then begin
64                 FolderTreeView.Items.GetFirstNode.Expanded := True;
65                 FolderTreeView.Items.GetFirstNode.Selected := True;
66         end;
67
68
69 {       Node := FolderTreeView.Items.AddChild(nil, GikoForm.Favorite.Root.Title);
70         Node.ImageIndex := 0;
71         Node.Data := GikoForm.Favorite.Root;
72         PrepareFavoriteTree(GikoForm.Favorite.Root, Node);
73         Node.Expanded := True;
74         Node.Selected := True;}
75 end;
76
77 {procedure TFavoriteArrangeDialog.PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
78 var
79         i: Integer;
80         ChildFavo: TFavoriteItem;
81         ChildNode: TTreeNode;
82 begin
83 {       for i := 0 to TFavoriteFolder(Favo).Count - 1 do begin
84
85                 ChildFavo := TFavoriteFolder(Favo).Items[i];
86                 if ChildFavo is TFavoriteFolder then begin
87                         ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
88                         ChildNode.ImageIndex := 0;
89                         ChildNode.SelectedIndex := 0;
90                         ChildNode.Data := ChildFavo;
91                         PrepareFavoriteTree(ChildFavo, ChildNode);
92                 end else if ChildFavo is TFavoriteBoardItem then begin
93                         ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
94                         ChildNode.ImageIndex := 1;
95                         ChildNode.SelectedIndex := 1;
96                         ChildNode.Data := ChildFavo;
97                 end else if ChildFavo is TFavoriteThreadItem then begin
98                         ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
99                         ChildNode.ImageIndex := 2;
100                         ChildNode.SelectedIndex := 2;
101                         ChildNode.Data := ChildFavo;
102                 end;
103         end;
104 end;  }
105
106 procedure TFavoriteArrangeDialog.NewFolderButtonClick(Sender: TObject);
107 var
108         Dlg: TNewFavoriteFolderDialog;
109         NewFavFolder: TFavoriteFolder;
110         Node: TTreeNode;
111 begin
112         if FolderTreeView.Selected = nil then
113                 Exit;
114         Dlg := TNewFavoriteFolderDialog.Create(Self);
115         try
116                 Dlg.ShowModal;
117                 if Dlg.ModalResult = mrOK then begin
118                         if Length(Dlg.FolderEdit.Text) = 0 then
119                                 Exit;
120                         if not (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then
121                                 FolderTreeView.Selected := FolderTreeView.Selected.Parent;
122
123                         NewFavFolder := TFavoriteFolder.Create;
124                         Node := FolderTreeView.Items.AddChildObject(FolderTreeView.Selected, Dlg.FolderEdit.Text, NewFavFolder);
125                         Node.ImageIndex := 14;
126                         Node.SelectedIndex := 14;
127 //                      FolderTreeView.Selected.Expanded := True;
128                         FolderTreeView.Selected := Node;
129                 end;
130         finally
131                 Dlg.Release;
132         end;
133 end;
134
135 procedure TFavoriteArrangeDialog.RenameButtonClick(Sender: TObject);
136 begin
137         if FolderTreeView.Selected = nil then
138                 Exit;
139         if FolderTreeView.Selected.IsFirstNode then
140                 Exit;
141         if FolderTreeView.Selected.Text = Favorite.FAVORITE_LINK_NAME then
142                 Exit;
143         FolderTreeView.ReadOnly := False;
144         FolderTreeView.Selected.EditText;
145 end;
146
147 procedure TFavoriteArrangeDialog.DeleteButtonClick(Sender: TObject);
148 const
149         DEL_LINK_MSG = '\81g\83\8a\83\93\83N\81h\82Í\83\8a\83\93\83N\83o\81[\97p\83t\83H\83\8b\83_\82Å\82·\81B\8dí\8f\9c\82µ\82Ä\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
150         DEL_MSG = '\81g^0\81h\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
151         DEL_TITLE = '\8dí\8f\9c\8am\94F';
152 begin
153         if FolderTreeView.Selected = nil then
154                 Exit;
155         if FolderTreeView.Selected.IsFirstNode then
156                 Exit;
157         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then begin
158                 if FolderTreeView.Selected.Text = Favorite.FAVORITE_LINK_NAME then begin
159                         if MsgBox(Handle, DEL_LINK_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
160                                 Exit;
161                 end else begin
162                         if MsgBox(Handle, StringReplace( DEL_MSG, '^0', FolderTreeView.Selected.Text, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
163                                 Exit;
164                 end;
165         end;
166
167         FDeleteList.Add(FolderTreeView.Selected.Data);
168         SetDeleteItemList(FolderTreeView.Selected);
169
170         FolderTreeView.Selected.Delete;
171 end;
172
173 procedure TFavoriteArrangeDialog.FolderTreeViewEdited(Sender: TObject;
174         Node: TTreeNode; var S: String);
175 begin
176         FolderTreeView.ReadOnly := True;
177 end;
178
179 procedure TFavoriteArrangeDialog.FolderTreeViewDragOver(Sender,
180         Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
181 begin
182         if Source = FolderTreeView then begin
183                 if FolderTreeView.Selected = FolderTreeView.Items.GetFirstNode then begin
184                         Accept := False;
185                         Exit;
186                 end;
187                 Accept := True;
188         end else
189                 Accept := False;
190 end;
191
192 procedure TFavoriteArrangeDialog.FolderTreeViewDragDrop(Sender,
193         Source: TObject; X, Y: Integer);
194 begin
195         if FolderTreeView.GetNodeAt(X, Y) = nil then
196                 Exit;
197         if Source <> FolderTreeView then
198                 Exit;
199         if FolderTreeView.Selected = FolderTreeView.GetNodeAt(X, Y) then
200                 Exit;
201
202         if TObject(FolderTreeView.GetNodeAt(X, Y).Data) is TFavoriteFolder then
203                 FolderTreeView.Selected.MoveTo(FolderTreeView.GetNodeAt(X, Y), naAddChild)
204         else if TObject(FolderTreeView.GetNodeAt(X, Y).Data) is TFavoriteBoardItem then
205                 FolderTreeView.Selected.MoveTo(FolderTreeView.GetNodeAt(X, Y), naInsert)
206         else if TObject(FolderTreeView.GetNodeAt(X, Y).Data) is TFavoriteThreadItem then
207                 FolderTreeView.Selected.MoveTo(FolderTreeView.GetNodeAt(X, Y), naInsert);
208 end;
209
210 procedure TFavoriteArrangeDialog.FormDestroy(Sender: TObject);
211 var
212         i: Integer;
213 begin
214         FavoriteDM.TreeView.Items := FolderTreeView.Items;
215
216         for i := FDeleteList.Count - 1 downto 0 do
217                 TObject(FDeleteList[i]).Free;
218     FDeleteList.Free;
219         FavoriteDM.WriteFavorite;
220 end;
221
222 procedure TFavoriteArrangeDialog.SetDeleteItemList(Node: TTreeNode);
223 var
224         i: Integer;
225 begin
226         for i := 0 to Node.Count - 1 do begin
227                 FDeleteList.Add(Node.Item[i].Data);
228                 if Node.Item[i].Count > 0 then
229                         SetDeleteItemList(Node.item[i]);
230         end;
231 end;
232
233 end.