OSDN Git Service

・板一覧更新の処理メッセージを追加
[gikonavigoeson/gikonavi.git] / FavoriteAdd.pas
1 unit FavoriteAdd;
2
3 interface
4
5 uses
6         Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7         Dialogs, ComCtrls, StdCtrls, Favorite, ImgList, BoardGroup, NewFavoriteFolder;
8
9 type
10         TFavoriteAddDialog = class(TForm)
11     TitleLabel: TLabel;
12     NameLabel: TLabel;
13                 Label3: TLabel;
14     NameEdit: TEdit;
15                 CaptionEdit: TEdit;
16                 OKButton: TButton;
17                 CancelButton: TButton;
18                 NewFolderButton: TButton;
19                 FolderTreeView: TTreeView;
20                 Label4: TLabel;
21                 procedure FormCreate(Sender: TObject);
22                 procedure OKButtonClick(Sender: TObject);
23                 procedure CancelButtonClick(Sender: TObject);
24                 procedure NewFolderButtonClick(Sender: TObject);
25         private
26                 { Private \90é\8c¾ }
27                 FBoard: TBoard;
28                 FThreadItem: TThreadItem;
29                 procedure CopyTree( dst, src : TTreeNode );
30 //              procedure PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
31                 function GetGikoFavoriteNode(FavFolder: TFavoriteFolder): TTreeNode;
32         public
33                 { Public \90é\8c¾ }
34                 procedure SetBoard(Board: TBoard);
35                 procedure SetThreadItem(ThreadItem: TThreadItem);
36         end;
37
38 var
39         FavoriteAddDialog: TFavoriteAddDialog;
40
41 implementation
42
43 uses Giko;
44
45 {$R *.dfm}
46
47 procedure TFavoriteAddDialog.CopyTree( dst, src : TTreeNode );
48 var
49         newNode : TTreeNode;
50 begin
51         while src <> nil do begin
52                 if TObject( src.Data ) is TFavoriteFolder then begin
53                         newNode := FolderTreeView.Items.AddChildObject( dst, src.Text, src.Data );
54                         newNode.ImageIndex              := src.ImageIndex;
55                         newNode.SelectedIndex   := src.SelectedIndex;
56                         CopyTree( newNode, src.getFirstChild );
57                 end;
58                 src := src.getNextSibling;
59         end;
60 end;
61
62 procedure TFavoriteAddDialog.FormCreate(Sender: TObject);
63 var
64         src             : TTreeNode;
65         node    : TTreeNode;
66     CenterForm: TCustomForm;
67 begin
68     CenterForm := TCustomForm(Owner);
69     if Assigned(CenterForm) then begin
70         Left := ((CenterForm.Width - Width) div 2) + CenterForm.Left;
71         Top := ((CenterForm.Height - Height) div 2) + CenterForm.Top;
72     end else begin
73         Left := (Screen.Width - Width) div 2;
74         Top := (Screen.Height - Height) div 2;
75     end;
76
77         FolderTreeView.Items.BeginUpdate;
78
79         // FavoriteDM \82Ì\83t\83H\83\8b\83_\8aK\91w\82ð\83R\83s\81[
80         FolderTreeView.Items.Clear;
81         src             := FavoriteDM.TreeView.Items.GetFirstNode;
82         node    := TTreeNode.Create( FolderTreeView.Items );
83         node := FolderTreeView.Items.AddFirst( node, src.Text );
84         node.Data                                               := src.Data;
85         node.ImageIndex                 := src.ImageIndex;
86         node.SelectedIndex      := src.SelectedIndex;
87         CopyTree( node, src.getFirstChild );
88
89         if FolderTreeView.Items.GetFirstNode <> nil then begin
90                 FolderTreeView.Items.GetFirstNode.Expanded := True;
91                 FolderTreeView.Items.GetFirstNode.Selected := True;
92         end;
93         FolderTreeView.Items.EndUpdate;
94
95 {       Node := FolderTreeView.Items.AddChild(nil, GikoForm.Favorite.Root.Title);
96         Node.ImageIndex := 0;
97         Node.Data := GikoForm.Favorite.Root;
98         PrepareFavoriteTree(GikoForm.Favorite.Root, Node);
99         Node.Expanded := True;
100         Node.Selected := True;}
101 end;
102
103
104 {procedure TFavoriteAddDialog.PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
105 var
106         i: Integer;
107         ChildFavo: TFavoriteItem;
108         ChildNode: TTreeNode;
109 begin
110         for i := 0 to TFavoriteFolder(Favo).Count - 1 do begin
111
112                 ChildFavo := TFavoriteFolder(Favo).Items[i];
113                 if ChildFavo is TFavoriteFolder then begin
114                         ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
115                         ChildNode.ImageIndex := 0;
116                         ChildNode.Data := ChildFavo;
117                         PrepareFavoriteTree(ChildFavo, ChildNode);
118                 end else if ChildFavo is TFavoriteBoardItem then begin
119                 end else if ChildFavo is TFavoriteThreadItem then begin
120                 end;
121         end;
122 end;}
123
124 procedure TFavoriteAddDialog.OKButtonClick(Sender: TObject);
125 var
126         Node                                            : TTreeNode;
127         NewNode                                 : TTreeNode;
128         FavoBoardItem           : TFavoriteBoardItem;
129         FavoThreadItem  : TFavoriteThreadItem;
130         FavNode                                 : TTreeNode;
131 begin
132         if FolderTreeView.Selected = nil then
133                 Exit;
134
135         Node            := FolderTreeView.Items.GetFirstNode;
136         while Node <> nil do begin
137                 FavNode := GetGikoFavoriteNode(Node.Data);
138                 if FavNode = nil then begin
139                         if Node.Parent <> nil then
140                                 FavNode := GetGikoFavoriteNode(Node.Parent.Data);
141                         if FavNode <> nil then begin
142                                 NewNode := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Node.Text, Node.Data);
143                                 NewNode.ImageIndex := 14;
144                                 NewNode.SelectedIndex := 14;
145                         end;
146                 end;
147                 Node := Node.GetNext;
148         end;
149
150         FavNode := GetGikoFavoriteNode(FolderTreeView.Selected.Data);
151         if FavNode <> nil then begin
152                 if FBoard <> nil then begin
153                         FavoBoardItem := TFavoriteBoardItem.Create( FBoard.URL, FBoard.Title, FBoard );
154                         NewNode := FavoriteDM.TreeView.Items.AddChildObject(FavNode, CaptionEdit.Text, FavoBoardItem);
155                         NewNode.ImageIndex := 15;
156                         NewNode.SelectedIndex := 15;
157                 end else if FThreadItem <> nil then begin
158                         FavoThreadItem := TFavoriteThreadItem.Create( FThreadItem.URL, FThreadItem.Title, FThreadItem );
159                         NewNode := FavoriteDM.TreeView.Items.AddChildObject(FavNode, CaptionEdit.Text, FavoThreadItem);
160                         NewNode.ImageIndex := 16;
161                         NewNode.SelectedIndex := 16;
162                 end;
163         end;
164
165         FavoriteDM.WriteFavorite;
166         Close;
167 end;
168
169 procedure TFavoriteAddDialog.CancelButtonClick(Sender: TObject);
170 begin
171         Close;
172 end;
173
174 procedure TFavoriteAddDialog.NewFolderButtonClick(Sender: TObject);
175 var
176         Dlg: TNewFavoriteFolderDialog;
177         Node: TTreeNode;
178         FavFolder: TFavoriteFolder;
179 begin
180         if FolderTreeView.Selected = nil then
181                 Exit;
182
183         Dlg := TNewFavoriteFolderDialog.Create(Self);
184         try
185                 Dlg.ShowModal;
186                 if Dlg.ModalResult = mrOK then begin
187                         if Length(Dlg.FolderEdit.Text) = 0 then
188                                 Exit;
189                         FavFolder := TFavoriteFolder.Create;
190                         Node := FolderTreeView.Items.AddChildObject(FolderTreeView.Selected, Dlg.FolderEdit.Text, FavFolder);
191                         Node.ImageIndex := 14;
192                         Node.SelectedIndex := 14;
193                         FolderTreeView.Selected := Node;
194                 end;
195         finally
196                 Dlg.Free;
197         end;
198 end;
199
200 procedure TFavoriteAddDialog.SetBoard(Board: TBoard);
201 begin
202         FBoard := Board;
203         if Board = nil then Exit;
204
205         NameEdit.Text := Board.Title;
206         CaptionEdit.Text := Board.Title;
207         TitleLabel.Caption := '\82±\82Ì\94Â\82ª\82¨\8bC\82É\93ü\82è\82É\92Ç\89Á\82³\82ê\82Ü\82·';
208         NameLabel.Caption := '\94Â\96¼:';
209 end;
210
211 procedure TFavoriteAddDialog.SetThreadItem(ThreadItem: TThreadItem);
212 begin
213         FThreadItem := ThreadItem;
214         if ThreadItem = nil then Exit;
215
216         NameEdit.Text := ThreadItem.Title;
217         CaptionEdit.Text := ThreadItem.Title;
218         TitleLabel.Caption := '\82±\82Ì\83X\83\8c\83b\83h\82ª\82¨\8bC\82É\93ü\82è\82É\92Ç\89Á\82³\82ê\82Ü\82·';
219         NameLabel.Caption := '\83X\83\8c\83b\83h\96¼:';
220 end;
221
222 function TFavoriteAddDialog.GetGikoFavoriteNode(FavFolder: TFavoriteFolder): TTreeNode;
223 var
224         Node    : TTreeNode;
225 begin
226         Result  := nil;
227         Node            := FavoriteDM.TreeView.Items.GetFirstNode;
228         while Node <> nil do begin
229                 if Node.Data = FavFolder then begin
230                         Result := Node;
231                         Exit;
232                 end;
233                 Node := Node.GetNext;
234         end;
235 end;
236
237 end.