6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, ExtCtrls, ComCtrls,
8 BoardGroup, GikoSystem, bmRegExp, Giko;
11 TSearchDialog = class(TForm)
12 BoardListView: TListView;
15 CancelBotton: TButton;
17 SearchComboBox: TComboBox;
18 CategoryListView: TListView;
19 AllReleaseButton: TButton;
20 AllSelectButton: TButton;
22 NameCheckBox: TCheckBox;
23 MailCheckBox: TCheckBox;
24 IDCheckBox: TCheckBox;
25 SentenceCheckBox: TCheckBox;
26 procedure FormCreate(Sender: TObject);
27 procedure CategoryListViewSelectItem(Sender: TObject; Item: TListItem;
29 procedure BoardListViewChange(Sender: TObject; Item: TListItem;
31 procedure AllSelectButtonClick(Sender: TObject);
32 procedure AllReleaseButtonClick(Sender: TObject);
33 procedure OkBottonClick(Sender: TObject);
34 procedure BoardListViewDblClick(Sender: TObject);
35 procedure CancelBottonClick(Sender: TObject);
36 procedure BoardListViewResize(Sender: TObject);
40 FRegItem: TThreadItem;
41 procedure SetCategoryList;
42 procedure SetBoardList(Item: TListItem);
43 procedure CheckItem(Item: TObject);
44 procedure OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
47 // constructor Create(AOwner: TComponent); overload; override;
48 constructor Create(AOwner: TComponent; ChkItem: TObject); virtual; //overload;
52 SearchDialog: TSearchDialog;
58 {constructor TSearchDialog.Create(AOwner: TComponent);
63 constructor TSearchDialog.Create(AOwner: TComponent; ChkItem: TObject);
65 inherited Create(AOwner);
69 procedure TSearchDialog.FormCreate(Sender: TObject);
75 procedure TSearchDialog.CategoryListViewSelectItem(Sender: TObject;
76 Item: TListItem; Selected: Boolean);
78 if not Selected then Exit;
82 procedure TSearchDialog.SetCategoryList;
87 Item := CategoryListView.Items.Add;
88 Item.Caption := '
\81i
\82·
\82×
\82Ä
\81j';
90 for i := 0 to BBS2ch.Count - 1 do begin
91 Item := CategoryListView.Items.Add;
92 Item.Caption := BBS2ch.Items[i].Title;
93 Item.Data := BBS2ch.Items[i];
94 for j := 0 to BBS2ch.Items[i].Count - 1 do
95 BBS2ch.Items[i].Items[j].BoolData := False;
99 procedure TSearchDialog.SetBoardList(Item: TListItem);
106 if Item.Data = nil then begin
107 for i := 0 to BBS2ch.Count - 1 do begin
108 Category := BBS2ch.Items[i];
109 for j := 0 to Category.Count - 1 do begin
110 NewItem := BoardListView.Items.Add;
111 NewItem.Caption := Category.Items[j].Title;
112 NewItem.Checked := Category.Items[j].BoolData;
113 NewItem.Data := Category.Items[j];
116 end else if TObject(Item.Data) is TCategory then begin
117 Category := TCategory(Item.Data);
118 for i := 0 to Category.Count - 1 do begin
119 NewItem := BoardListView.Items.Add;
120 NewItem.Caption := Category.Items[i].Title;
121 NewItem.Checked := Category.Items[i].BoolData;
122 NewItem.Data := Category.Items[i];
127 procedure TSearchDialog.CheckItem(Item: TObject);
133 if Item is TCategory then begin
134 Category := TCategory(Item);
135 for i := 0 to CategoryListView.Items.Count - 1 do begin
136 if TObject(CategoryListView.Items[i].Data) is TCategory then
137 if TCategory(CategoryListView.Items[i].Data) = Category then begin
138 CategoryListView.Items[i].Selected := True;
139 CategoryListView.Items[i].MakeVisible(False);
142 AllSelectButtonClick( nil );
143 end else if Item is TBoard then begin
144 Board := TBoard(Item);
145 Category := Board.ParentCategory;
146 Board.BoolData := True;
147 for i := 0 to CategoryListView.Items.Count - 1 do begin
148 if TObject(CategoryListView.Items[i].Data) is TCategory then begin
149 if TCategory(CategoryListView.Items[i].Data) = Category then begin
150 CategoryListView.Items[i].Selected := True;
151 CategoryListView.Items[i].MakeVisible(False);
156 //
\81u(
\82·
\82×
\82Ä)
\81v
\82É
\83`
\83F
\83b
\83N
157 CategoryListView.Items[0].Selected := True;
158 CategoryListView.Items[0].MakeVisible(False);
159 AllSelectButtonClick( nil );
163 procedure TSearchDialog.BoardListViewChange(Sender: TObject;
164 Item: TListItem; Change: TItemChange);
168 if TObject(Item.Data) is TBoard then begin
169 Board := TBoard(Item.Data);
170 Board.BoolData := Item.Checked;
174 procedure TSearchDialog.AllSelectButtonClick(Sender: TObject);
179 for i := 0 to BoardListView.Items.Count - 1 do begin
180 if TObject(BoardListView.Items[i].Data) is TBoard then begin
181 //Board := TBoard(BoardListView.Items[i].Data);
182 BoardListView.Items[i].Checked := True;
187 procedure TSearchDialog.AllReleaseButtonClick(Sender: TObject);
192 for i := 0 to BoardListView.Items.Count - 1 do begin
193 if TObject(BoardListView.Items[i].Data) is TBoard then begin
194 //Board := TBoard(BoardListView.Items[i].Data);
195 BoardListView.Items[i].Checked := False;
200 procedure TSearchDialog.OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
203 //
\92T
\82µ
\82Ä
\82¢
\82é
\83t
\83@
\83C
\83\8b\82©
\82ç
\8c©
\82Â
\82©
\82Á
\82½
\82Ì
\82Å
\83\8a\83X
\83g
\82É
\92Ç
\89Á
\82·
\82é
204 BoardListView.AddItem( FRegItem.Title, FRegItem );
205 //
\82±
\82Ì
\83t
\83@
\83C
\83\8b\82Í
\82à
\82¤
\8c©
\82Â
\82¯
\82½
\82Ì
\82Å
\82±
\82ê
\88È
\8fã
\91±
\82¯
\82È
\82¢
206 TGrep( Sender ).Cancel := True;
210 procedure TSearchDialog.OkBottonClick(Sender: TObject);
215 ThreadItem: TThreadItem;
223 // grep
\93à
\82Å
\83C
\83x
\83\93\83g
\82ª
\8fE
\82¦
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\91\80\8dì
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
224 AllSelectButton.Enabled := False;
225 AllReleaseButton.Enabled := False;
226 OkBotton.Enabled := False;
227 CancelBotton.Enabled := False;
228 CategoryListView.Enabled := False;
230 Screen.Cursor := crHourglass;
231 //sl := TStringList.Create;
232 List := TList.Create;
234 Reg := TGrep.Create( nil );
238 // grep
\97p
\82Ì
\8c\9f\8dõ
\83\8f\81[
\83h
\82ð
\90¶
\90¬
239 Reg.OnMatch := OnMatch;
240 Reg.UseFuzzyCharDic := True;
242 If NameCheckBox.Checked And
243 MailCheckBox.Checked And
244 IDCheckBox.Checked And
245 SentenceCheckBox.Checked Then
247 //
\91S
\82Ä
\83Z
\83b
\83g
\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82Í
\90³
\8bK
\95\
\8c»
\82ð
\8bÉ
\97Í
\8eg
\82í
\82È
\82¢
248 // (
\90³
\8bK
\95\
\8c»
\82ð
\8eg
\82¤
\82Æ
\82©
\82È
\82è
\92x
\82¢
\82Ì
\82Å)
249 Reg.RegExp := SearchComboBox.Text;
251 If NameCheckBox.Checked Then
252 Filter := '.*' + SearchComboBox.Text + '.*<>'
255 If MailCheckBox.Checked Then
256 Filter := Filter + '.*' + SearchComboBox.Text + '.*<>'
258 Filter := Filter + '.*<>';
259 If IDCheckBox.Checked Then
260 Filter := Filter + '.*' + SearchComboBox.Text + '.*<>'
262 Filter := Filter + '.*<>';
263 If SentenceCheckBox.Checked Then
264 Filter := Filter + '.*' + SearchComboBox.Text + '.*<>\n'
266 Filter := Filter + '.*<>\n';
268 Reg.RegExp := Filter;
271 //
\83T
\83C
\83g
\82Ì
\92\86\82Ì (
\91±
\82)
272 for i := 0 to BBS2ch.Count - 1 do begin
273 //
\83J
\83e
\83S
\83\8a\82Ì
\92\86\82Ì (
\91±
\82)
274 Category := BBS2ch.Items[i];
275 for j := 0 to Category.Count - 1 do begin
276 //
\94Â
\82Ì
\92\86\82Ì (
\91±
\82)
277 Board := Category.Items[j];
278 if not Board.IsThreadDatRead then
279 GikoSys.ReadSubjectFile(Board);
280 for k := 0 to Board.Count - 1 do begin
281 //
\8cÂ
\81X
\82Ì
\83X
\83\8c\83b
\83h
\82Ì (
\91±
\82)
282 ThreadItem := Board.Items[k];
283 if FileExists( ThreadItem.GetThreadFileName ) then begin
285 //
\83\8d\83O
\82ª
\91¶
\8dÝ
\82·
\82é
289 //
\81¦
\8c©
\82Â
\82©
\82Á
\82½
\82ç OnMatch
\82É
\94ò
\82Ô
290 FRegItem := ThreadItem;
291 Reg.GrepByRegExp( ThreadItem.GetThreadFileName )
303 Screen.Cursor := crDefault;
306 //
\91\80\8dì
\82Å
\82«
\82é
\82æ
\82¤
\82É
\8aJ
\95ú
307 AllSelectButton.Enabled := True;
308 AllReleaseButton.Enabled := True;
309 OkBotton.Enabled := True;
310 CancelBotton.Enabled := True;
311 CategoryListView.Enabled := True;
316 procedure TSearchDialog.BoardListViewDblClick(Sender: TObject);
319 If TObject( BoardListView.Selected.Data ) is TThreadItem Then
320 GikoForm.InsertBrowserTab( TThreadItem(BoardListView.Selected.Data) );
324 procedure TSearchDialog.CancelBottonClick(Sender: TObject);
331 procedure TSearchDialog.BoardListViewResize(Sender: TObject);
334 BoardListView.Column[ 0 ].Width := BoardListView.ClientWidth;