OSDN Git Service

コンパイル時に[警告][ヒント]がなるべく出ないように修正。
[gikonavigoeson/gikonavi.git] / Search.pas
1 unit Search;
2
3 interface
4
5 uses
6         Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7         Dialogs, StdCtrls, ExtCtrls, ComCtrls,
8         BoardGroup, GikoSystem;
9
10 type
11         TSearchDialog = class(TForm)
12                 BoardListView: TListView;
13                 BoardLabel: TLabel;
14                 OkBotton: TButton;
15                 CancelBotton: TButton;
16                 Label1: TLabel;
17                 ComboBox1: TComboBox;
18                 CategoryListView: TListView;
19                 AllReleaseButton: TButton;
20                 AllSelectButton: TButton;
21                 GroupBox1: TGroupBox;
22                 CheckBox1: TCheckBox;
23                 CheckBox2: TCheckBox;
24                 CheckBox3: TCheckBox;
25                 CheckBox4: TCheckBox;
26                 procedure FormCreate(Sender: TObject);
27                 procedure CategoryListViewSelectItem(Sender: TObject; Item: TListItem;
28                         Selected: Boolean);
29                 procedure BoardListViewChange(Sender: TObject; Item: TListItem;
30                         Change: TItemChange);
31                 procedure AllSelectButtonClick(Sender: TObject);
32                 procedure AllReleaseButtonClick(Sender: TObject);
33                 procedure OkBottonClick(Sender: TObject);
34         private
35                 { Private \90é\8c¾ }
36                 FChkItem: TObject;
37                 procedure SetCategoryList;
38                 procedure SetBoardList(Item: TListItem);
39                 procedure CheckItem(Item: TObject);
40         public
41                 { Public \90é\8c¾ }
42 //              constructor Create(AOwner: TComponent); overload; override;
43                 constructor Create(AOwner: TComponent; ChkItem: TObject); virtual; //overload;
44         end;
45
46 var
47         SearchDialog: TSearchDialog;
48
49 implementation
50
51 {$R *.dfm}
52
53 {constructor TSearchDialog.Create(AOwner: TComponent);
54 begin
55         Create(AOwner, nil);
56 end;}
57
58 constructor TSearchDialog.Create(AOwner: TComponent; ChkItem: TObject);
59 begin
60         inherited Create(AOwner);
61         FChkItem := ChkItem;
62 end;
63
64 procedure TSearchDialog.FormCreate(Sender: TObject);
65 begin
66         SetCategoryList;
67         if (FChkItem is TCategory) or (FChkItem is TBoard) then
68                 CheckItem(FChkItem);
69 end;
70
71 procedure TSearchDialog.CategoryListViewSelectItem(Sender: TObject;
72         Item: TListItem; Selected: Boolean);
73 begin
74         if not Selected then Exit;
75         SetBoardList(Item);
76 end;
77
78 procedure TSearchDialog.SetCategoryList;
79 var
80         i, j: integer;
81         Item: TListItem;
82 begin
83         Item := CategoryListView.Items.Add;
84         Item.Caption := '\81i\82·\82×\82Ä\81j';
85         Item.Data := nil;
86         for i := 0 to BBS2ch.Count - 1 do begin
87                 Item := CategoryListView.Items.Add;
88                 Item.Caption := BBS2ch.Items[i].Title;
89                 Item.Data := BBS2ch.Items[i];
90                 for j := 0 to BBS2ch.Items[i].Count - 1 do
91                         BBS2ch.Items[i].Items[j].BoolData := False;
92         end;
93 end;
94
95 procedure TSearchDialog.SetBoardList(Item: TListItem);
96 var
97         i, j: Integer;
98         NewItem: TListItem;
99         Category: TCategory;
100 begin
101         BoardListView.Clear;
102         if Item.Data = nil then begin
103                 for i := 0 to BBS2ch.Count - 1 do begin
104                         Category := BBS2ch.Items[i];
105                         for j := 0 to Category.Count - 1 do begin
106                                 NewItem := BoardListView.Items.Add;
107                                 NewItem.Caption := Category.Items[j].Title;
108                                 NewItem.Checked := Category.Items[j].BoolData;
109                                 NewItem.Data := Category.Items[j];
110                         end;
111                 end;
112         end else if TObject(Item.Data) is TCategory then begin
113                 Category := TCategory(Item.Data);
114                 for i := 0 to Category.Count - 1 do begin
115                         NewItem := BoardListView.Items.Add;
116                         NewItem.Caption := Category.Items[i].Title;
117                         NewItem.Checked := Category.Items[i].BoolData;
118                         NewItem.Data := Category.Items[i];
119                 end;
120         end;
121 end;
122
123 procedure TSearchDialog.CheckItem(Item: TObject);
124 var
125         i: Integer;
126         Category: TCategory;
127         Board: TBoard;
128 begin
129         if Item is TCategory then begin
130                 Category := TCategory(Item);
131                 for i := 0 to CategoryListView.Items.Count - 1 do begin
132                         if TObject(CategoryListView.Items[i].Data) is TCategory then
133                                 if TCategory(CategoryListView.Items[i].Data) = Category then begin
134                                         CategoryListView.Items[i].Selected := True;
135                                         CategoryListView.Items[i].MakeVisible(False);
136                                 end;
137                 end;
138         end else if Item is TBoard then begin
139                 Board := TBoard(Item);
140                 Category := Board.ParentCategory;
141                 Board.BoolData := True;
142                 for i := 0 to CategoryListView.Items.Count - 1 do begin
143                         if TObject(CategoryListView.Items[i].Data) is TCategory then begin
144                                 if TCategory(CategoryListView.Items[i].Data) = Category then begin
145                                         CategoryListView.Items[i].Selected := True;
146                                         CategoryListView.Items[i].MakeVisible(False);
147                                 end;
148                         end;
149                 end;
150         end;
151 end;
152
153 procedure TSearchDialog.BoardListViewChange(Sender: TObject;
154         Item: TListItem; Change: TItemChange);
155 var
156         Board: TBoard;
157 begin
158         if TObject(Item.Data) is TBoard then begin
159                 Board := TBoard(Item.Data);
160                 Board.BoolData := Item.Checked;
161         end;
162 end;
163
164 procedure TSearchDialog.AllSelectButtonClick(Sender: TObject);
165 var
166         i: Integer;
167         //Board: TBoard;
168 begin
169         for i := 0 to BoardListView.Items.Count - 1 do begin
170                 if TObject(BoardListView.Items[i].Data) is TBoard then begin
171                         //Board := TBoard(BoardListView.Items[i].Data);
172                         BoardListView.Items[i].Checked := True;
173                 end;
174         end;
175 end;
176
177 procedure TSearchDialog.AllReleaseButtonClick(Sender: TObject);
178 var
179         i: Integer;
180         //Board: TBoard;
181 begin
182         for i := 0 to BoardListView.Items.Count - 1 do begin
183                 if TObject(BoardListView.Items[i].Data) is TBoard then begin
184                         //Board := TBoard(BoardListView.Items[i].Data);
185                         BoardListView.Items[i].Checked := False;
186                 end;
187         end;
188 end;
189
190 procedure TSearchDialog.OkBottonClick(Sender: TObject);
191 var
192         i, j, k: Integer;
193         Board: TBoard;
194         ThreadItem: TThreadItem;
195         List: TList;
196         sl: TStringList;
197 begin
198         Screen.Cursor := crHourglass;
199         sl := TStringList.Create;
200         List := TList.Create;
201         try
202                 BoardListView.Clear;
203                 for i := 0 to BBS2ch.Count - 1 do begin
204                         for j := 0 to BBS2ch.Items[i].Count - 1 do begin
205                                 Board := TBoard(BBS2ch.Items[i]);
206                                 if not Board.IsThreadDatRead then
207                                         GikoSys.ReadSubjectFile(Board);
208                                 for k := 0 to Board.Count - 1 do begin
209                                         ThreadItem := Board.Items[k];
210                                         if FileExists(ThreadItem.FileName) then begin
211                                                 sl.LoadFromFile(ThreadItem.FileName);
212                                         end;
213                                 end;
214                         end
215                 end;
216         finally
217                 sl.Free;
218                 List.Free;
219                 Screen.Cursor := crDefault;
220         end;
221 end;
222
223
224 end.