6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 Dialogs, StdCtrls, ExtCtrls, ComCtrls,
8 BoardGroup, GikoSystem, bmRegExp, YofUtils;
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 RegExpCheckBox: TCheckBox;
27 GoogleCheckBox: TCheckBox;
28 FuzzyCharDicCheckBox: TCheckBox;
29 procedure FormCreate(Sender: TObject);
30 procedure CategoryListViewSelectItem(Sender: TObject; Item: TListItem;
32 procedure BoardListViewChange(Sender: TObject; Item: TListItem;
34 procedure AllSelectButtonClick(Sender: TObject);
35 procedure AllReleaseButtonClick(Sender: TObject);
36 procedure OkBottonClick(Sender: TObject);
37 procedure BoardListViewDblClick(Sender: TObject);
38 procedure CancelBottonClick(Sender: TObject);
39 procedure BoardListViewResize(Sender: TObject);
43 FRegItem: TThreadItem;
45 procedure SetCategoryList;
46 procedure SetBoardList(Item: TListItem);
47 procedure CheckItem(Item: TObject);
48 procedure OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
51 // constructor Create(AOwner: TComponent); overload; override;
52 constructor Create(AOwner: TComponent; ChkItem: TObject); virtual; //overload;
56 SearchDialog: TSearchDialog;
64 {constructor TSearchDialog.Create(AOwner: TComponent);
69 constructor TSearchDialog.Create(AOwner: TComponent; ChkItem: TObject);
71 inherited Create(AOwner);
76 procedure TSearchDialog.FormCreate(Sender: TObject);
82 procedure TSearchDialog.CategoryListViewSelectItem(Sender: TObject;
83 Item: TListItem; Selected: Boolean);
85 if not Selected then Exit;
89 procedure TSearchDialog.SetCategoryList;
95 Item := CategoryListView.Items.Add;
96 Item.Caption := '
\81i
\82·
\82×
\82Ä
\81j';
98 for k := 0 to Length( BBSs ) - 1 do begin
100 for i := 0 to bbs.Count - 1 do begin
101 Item := CategoryListView.Items.Add;
102 Item.Caption := bbs.Items[i].Title;
103 Item.Data := bbs.Items[i];
104 for j := 0 to bbs.Items[i].Count - 1 do
105 bbs.Items[i].Items[j].BoolData := False;
110 procedure TSearchDialog.SetBoardList(Item: TListItem);
118 if Item.Data = nil then begin
119 for k := 0 to Length( BBSs ) - 1 do begin
121 for i := 0 to bbs.Count - 1 do begin
122 Category := bbs.Items[i];
123 for j := 0 to Category.Count - 1 do begin
124 NewItem := BoardListView.Items.Add;
125 NewItem.Caption := Category.Items[j].Title;
126 NewItem.Checked := Category.Items[j].BoolData;
127 NewItem.Data := Category.Items[j];
131 end else if TObject(Item.Data) is TCategory then begin
132 Category := TCategory(Item.Data);
133 for i := 0 to Category.Count - 1 do begin
134 NewItem := BoardListView.Items.Add;
135 NewItem.Caption := Category.Items[i].Title;
136 NewItem.Checked := Category.Items[i].BoolData;
137 NewItem.Data := Category.Items[i];
142 procedure TSearchDialog.CheckItem(Item: TObject);
148 if Item is TCategory then begin
149 Category := TCategory(Item);
150 for i := 0 to CategoryListView.Items.Count - 1 do begin
151 if TObject(CategoryListView.Items[i].Data) is TCategory then
152 if TCategory(CategoryListView.Items[i].Data) = Category then begin
153 CategoryListView.Items[i].Selected := True;
154 CategoryListView.Items[i].MakeVisible(False);
157 AllSelectButtonClick( nil );
158 end else if Item is TBoard then begin
159 Board := TBoard(Item);
160 Category := Board.ParentCategory;
161 Board.BoolData := True;
162 for i := 0 to CategoryListView.Items.Count - 1 do begin
163 if TObject(CategoryListView.Items[i].Data) is TCategory then begin
164 if TCategory(CategoryListView.Items[i].Data) = Category then begin
165 CategoryListView.Items[i].Selected := True;
166 CategoryListView.Items[i].MakeVisible(False);
171 //
\81u(
\82·
\82×
\82Ä)
\81v
\82É
\83`
\83F
\83b
\83N
172 CategoryListView.Items[0].Selected := True;
173 CategoryListView.Items[0].MakeVisible(False);
174 AllSelectButtonClick( nil );
178 procedure TSearchDialog.BoardListViewChange(Sender: TObject;
179 Item: TListItem; Change: TItemChange);
183 if TObject(Item.Data) is TBoard then begin
184 Board := TBoard(Item.Data);
185 Board.BoolData := Item.Checked;
189 procedure TSearchDialog.AllSelectButtonClick(Sender: TObject);
194 for i := 0 to BoardListView.Items.Count - 1 do begin
195 if TObject(BoardListView.Items[i].Data) is TBoard then begin
196 //Board := TBoard(BoardListView.Items[i].Data);
197 BoardListView.Items[i].Checked := True;
202 procedure TSearchDialog.AllReleaseButtonClick(Sender: TObject);
207 for i := 0 to BoardListView.Items.Count - 1 do begin
208 if TObject(BoardListView.Items[i].Data) is TBoard then begin
209 //Board := TBoard(BoardListView.Items[i].Data);
210 BoardListView.Items[i].Checked := False;
215 procedure TSearchDialog.OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
218 //
\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é
219 BoardListView.AddItem( FRegItem.Title, FRegItem );
220 //
\82±
\82Ì
\83t
\83@
\83C
\83\8b\82Í
\82à
\82¤
\8c©
\82Â
\82¯
\82½
\82Ì
\82Å
\82±
\82ê
\88È
\8fã
\91±
\82¯
\82È
\82¢
221 TGrep( Sender ).Cancel := True;
225 procedure TSearchDialog.OkBottonClick(Sender: TObject);
230 ThreadItem: TThreadItem;
239 // 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é
240 AllSelectButton.Enabled := False;
241 AllReleaseButton.Enabled := False;
242 OkBotton.Enabled := False;
243 CancelBotton.Enabled := true;
245 CategoryListView.Enabled := False;
247 Screen.Cursor := crHourglass;
248 //sl := TStringList.Create;
249 List := TList.Create;
251 Reg := TGrep.Create( nil );
253 if Length( SearchComboBox.Text ) > 0 then
255 // ComboBox
\82Ì
\93à
\97e
\82ð
\8dX
\90V
256 oldText := SearchComboBox.Text;
257 i := GikoSys.Setting.SelectTextList.IndexOf( oldText );
259 GikoSys.Setting.SelectTextList.Delete( i );
260 i := SearchComboBox.Items.IndexOf( oldText );
262 SearchComboBox.Items.Delete( i );
263 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
264 SearchComboBox.Items.Insert( 0, oldText );
265 SearchComboBox.Text := oldText;
268 Application.ProcessMessages;
269 // grep
\97p
\82Ì
\8c\9f\8dõ
\83\8f\81[
\83h
\82ð
\90¶
\90¬
270 Reg.OnMatch := OnMatch;
271 Reg.UseFuzzyCharDic := FuzzyCharDicCheckBox.Checked;
273 If RegExpCheckBox.Checked Then
274 SearchWord := SearchComboBox.Text
276 SearchWord := RegExpEncode( SearchComboBox.Text );
278 If NameCheckBox.Checked And
279 MailCheckBox.Checked And
280 IDCheckBox.Checked And
281 SentenceCheckBox.Checked Then
283 //
\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¢
284 // (
\90³
\8bK
\95\
\8c»
\82ð
\8eg
\82¤
\82Æ
\82©
\82È
\82è
\92x
\82¢
\82Ì
\82Å)
285 Reg.RegExp := SearchWord;
287 If NameCheckBox.Checked Then
288 Filter := '.*' + SearchWord + '.*<>'
291 If MailCheckBox.Checked Then
292 Filter := Filter + '.*' + SearchWord + '.*<>'
294 Filter := Filter + '.*<>';
295 If IDCheckBox.Checked Then
296 Filter := Filter + '.*' + SearchWord + '.*<>'
298 Filter := Filter + '.*<>';
299 If SentenceCheckBox.Checked Then
300 Filter := Filter + '.*' + SearchWord + '.*<>\n'
302 Filter := Filter + '.*<>\n';
304 Reg.RegExp := Filter;
307 //
\83T
\83C
\83g
\82Ì
\92\86\82Ì (
\91±
\82)
309 //
\8cf
\8e¦
\94Â
\82Ì
\92\86\82Ì (
\91±
\82)
310 for l := 0 to Length( BBSs ) - 1 do begin
312 for i := 0 to bbs.Count - 1 do begin
313 //
\83J
\83e
\83S
\83\8a\82Ì
\92\86\82Ì (
\91±
\82)
314 Category := bbs.Items[i];
315 for j := 0 to Category.Count - 1 do begin
316 //
\94Â
\82Ì
\92\86\82Ì (
\91±
\82)
317 Board := Category.Items[j];
318 if Board.BoolData then begin
319 if not Board.IsThreadDatRead then
320 GikoSys.ReadSubjectFile(Board);
321 for k := 0 to Board.Count - 1 do begin
322 //
\8cÂ
\81X
\82Ì
\83X
\83\8c\83b
\83h
\82Ì (
\91±
\82)
323 ThreadItem := Board.Items[k];
324 if FileExists( ThreadItem.GetThreadFileName ) then begin
325 //
\83\8d\83O
\82ª
\91¶
\8dÝ
\82·
\82é
328 //
\81¦
\8c©
\82Â
\82©
\82Á
\82½
\82ç OnMatch
\82É
\94ò
\82Ô
329 FRegItem := ThreadItem;
330 Reg.GrepByRegExp( ThreadItem.GetThreadFileName )
333 //Application.ProcessMessages;
334 if FCancel then raise Exception.Create('
\83\8d\83O
\8c\9f\8dõ
\82ð
\92\86\8e~
\82µ
\82Ü
\82·');
343 on E:Exception do ShowMessage(E.Message)
349 Screen.Cursor := crDefault;
352 //
\91\80\8dì
\82Å
\82«
\82é
\82æ
\82¤
\82É
\8aJ
\95ú
353 AllSelectButton.Enabled := True;
354 AllReleaseButton.Enabled := True;
355 OkBotton.Enabled := True;
356 CategoryListView.Enabled := True;
357 CancelBotton.Enabled := false;
361 procedure TSearchDialog.BoardListViewDblClick(Sender: TObject);
364 If TObject( BoardListView.Selected.Data ) is TThreadItem Then
365 GikoForm.InsertBrowserTab( TThreadItem(BoardListView.Selected.Data) );
369 procedure TSearchDialog.CancelBottonClick(Sender: TObject);
373 TGrep(Sender).Cancel := true;
378 procedure TSearchDialog.BoardListViewResize(Sender: TObject);
381 BoardListView.Column[ 0 ].Width := BoardListView.ClientWidth;