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);
38 FRegItem: TThreadItem;
39 procedure SetCategoryList;
40 procedure SetBoardList(Item: TListItem);
41 procedure CheckItem(Item: TObject);
42 procedure OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
45 // constructor Create(AOwner: TComponent); overload; override;
46 constructor Create(AOwner: TComponent; ChkItem: TObject); virtual; //overload;
50 SearchDialog: TSearchDialog;
56 {constructor TSearchDialog.Create(AOwner: TComponent);
61 constructor TSearchDialog.Create(AOwner: TComponent; ChkItem: TObject);
63 inherited Create(AOwner);
67 procedure TSearchDialog.FormCreate(Sender: TObject);
70 if (FChkItem is TCategory) or (FChkItem is TBoard) then
74 procedure TSearchDialog.CategoryListViewSelectItem(Sender: TObject;
75 Item: TListItem; Selected: Boolean);
77 if not Selected then Exit;
81 procedure TSearchDialog.SetCategoryList;
86 Item := CategoryListView.Items.Add;
87 Item.Caption := '
\81i
\82·
\82×
\82Ä
\81j';
89 for i := 0 to BBS2ch.Count - 1 do begin
90 Item := CategoryListView.Items.Add;
91 Item.Caption := BBS2ch.Items[i].Title;
92 Item.Data := BBS2ch.Items[i];
93 for j := 0 to BBS2ch.Items[i].Count - 1 do
94 BBS2ch.Items[i].Items[j].BoolData := False;
98 procedure TSearchDialog.SetBoardList(Item: TListItem);
105 if Item.Data = nil then begin
106 for i := 0 to BBS2ch.Count - 1 do begin
107 Category := BBS2ch.Items[i];
108 for j := 0 to Category.Count - 1 do begin
109 NewItem := BoardListView.Items.Add;
110 NewItem.Caption := Category.Items[j].Title;
111 NewItem.Checked := Category.Items[j].BoolData;
112 NewItem.Data := Category.Items[j];
115 end else if TObject(Item.Data) is TCategory then begin
116 Category := TCategory(Item.Data);
117 for i := 0 to Category.Count - 1 do begin
118 NewItem := BoardListView.Items.Add;
119 NewItem.Caption := Category.Items[i].Title;
120 NewItem.Checked := Category.Items[i].BoolData;
121 NewItem.Data := Category.Items[i];
126 procedure TSearchDialog.CheckItem(Item: TObject);
132 if Item is TCategory then begin
133 Category := TCategory(Item);
134 for i := 0 to CategoryListView.Items.Count - 1 do begin
135 if TObject(CategoryListView.Items[i].Data) is TCategory then
136 if TCategory(CategoryListView.Items[i].Data) = Category then begin
137 CategoryListView.Items[i].Selected := True;
138 CategoryListView.Items[i].MakeVisible(False);
141 end else if Item is TBoard then begin
142 Board := TBoard(Item);
143 Category := Board.ParentCategory;
144 Board.BoolData := True;
145 for i := 0 to CategoryListView.Items.Count - 1 do begin
146 if TObject(CategoryListView.Items[i].Data) is TCategory then begin
147 if TCategory(CategoryListView.Items[i].Data) = Category then begin
148 CategoryListView.Items[i].Selected := True;
149 CategoryListView.Items[i].MakeVisible(False);
156 procedure TSearchDialog.BoardListViewChange(Sender: TObject;
157 Item: TListItem; Change: TItemChange);
161 if TObject(Item.Data) is TBoard then begin
162 Board := TBoard(Item.Data);
163 Board.BoolData := Item.Checked;
167 procedure TSearchDialog.AllSelectButtonClick(Sender: TObject);
172 for i := 0 to BoardListView.Items.Count - 1 do begin
173 if TObject(BoardListView.Items[i].Data) is TBoard then begin
174 //Board := TBoard(BoardListView.Items[i].Data);
175 BoardListView.Items[i].Checked := True;
180 procedure TSearchDialog.AllReleaseButtonClick(Sender: TObject);
185 for i := 0 to BoardListView.Items.Count - 1 do begin
186 if TObject(BoardListView.Items[i].Data) is TBoard then begin
187 //Board := TBoard(BoardListView.Items[i].Data);
188 BoardListView.Items[i].Checked := False;
193 procedure TSearchDialog.OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
196 //
\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é
197 BoardListView.AddItem( FRegItem.Title, FRegItem );
198 //
\82±
\82Ì
\83t
\83@
\83C
\83\8b\82Í
\82à
\82¤
\8c©
\82Â
\82¯
\82½
\82Ì
\82Å
\82±
\82ê
\88È
\8fã
\91±
\82¯
\82È
\82¢
199 TGrep( Sender ).Cancel := True;
203 procedure TSearchDialog.OkBottonClick(Sender: TObject);
208 ThreadItem: TThreadItem;
215 Screen.Cursor := crHourglass;
216 //sl := TStringList.Create;
217 List := TList.Create;
220 //
\83T
\83C
\83g
\82Ì
\92\86\82Ì (
\91±
\82)
221 for i := 0 to BBS2ch.Count - 1 do begin
222 //
\83J
\83e
\83S
\83\8a\82Ì
\92\86\82Ì (
\91±
\82)
223 Category := BBS2ch.Items[i];
224 for j := 0 to Category.Count - 1 do begin
225 //
\94Â
\82Ì
\92\86\82Ì (
\91±
\82)
226 Board := Category.Items[j];
227 if not Board.IsThreadDatRead then
228 GikoSys.ReadSubjectFile(Board);
229 for k := 0 to Board.Count - 1 do begin
230 //
\8cÂ
\81X
\82Ì
\83X
\83\8c\83b
\83h
\82Ì (
\91±
\82)
231 ThreadItem := Board.Items[k];
232 if FileExists( ThreadItem.GetThreadFileName ) then begin
234 //
\83\8d\83O
\82ª
\91¶
\8dÝ
\82·
\82é
235 Reg := TGrep.Create( nil );
237 Reg.OnMatch := OnMatch;
238 Reg.UseFuzzyCharDic := True;
239 FRegItem := ThreadItem;
241 // grep
\97p
\82Ì
\8c\9f\8dõ
\83\8f\81[
\83h
\82ð
\90¶
\90¬
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 Reg.GrepByRegExp( ThreadItem.GetThreadFileName )
255 If NameCheckBox.Checked Then
256 Filter := '.*' + SearchComboBox.Text + '.*<>'
259 If MailCheckBox.Checked Then
260 Filter := Filter + '.*' + SearchComboBox.Text + '.*<>'
262 Filter := Filter + '.*<>';
263 If IDCheckBox.Checked Then
264 Filter := Filter + '.*' + SearchComboBox.Text + '.*<>'
266 Filter := Filter + '.*<>';
267 If SentenceCheckBox.Checked Then
268 Filter := Filter + '.*' + SearchComboBox.Text + '.*<>\n'
270 Filter := Filter + '.*<>\n';
272 Reg.RegExp := Filter;
275 //
\81¦
\8c©
\82Â
\82©
\82Á
\82½
\82ç OnMatch
\82É
\94ò
\82Ô
277 Reg.GrepByRegExp( ThreadItem.GetThreadFileName )
293 Screen.Cursor := crDefault;
297 procedure TSearchDialog.BoardListViewDblClick(Sender: TObject);
300 If TObject( BoardListView.Selected.Data ) is TThreadItem Then
301 GikoForm.InsertBrowserTab( TThreadItem(BoardListView.Selected.Data) );