SentenceCheckBox: TCheckBox;
RegExpCheckBox: TCheckBox;
GoogleCheckBox: TCheckBox;
+ FuzzyCharDicCheckBox: TCheckBox;
+ BoardsProgressBar: TProgressBar;
procedure FormCreate(Sender: TObject);
procedure CategoryListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure BoardListViewDblClick(Sender: TObject);
procedure CancelBottonClick(Sender: TObject);
procedure BoardListViewResize(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private \90é\8c¾ }
FChkItem: TObject;
FRegItem: TThreadItem;
- FCancel: Boolean;
+ FCancel: Boolean;
procedure SetCategoryList;
procedure SetBoardList(Item: TListItem);
procedure CheckItem(Item: TObject);
procedure OnMatch(Sender: TObject; LineInfo: RE_LineInfo_t);
+ procedure SearchLogs( Reg: TGrep );
+ procedure SearchLog(Reg: TGrep; Item: TThreadItem);
+ function CountBoards : Integer;
public
{ Public \90é\8c¾ }
// constructor Create(AOwner: TComponent); overload; override;
begin
inherited Create(AOwner);
FChkItem := ChkItem;
- FCancel := false;
+ FCancel := false;
end;
procedure TSearchDialog.FormCreate(Sender: TObject);
procedure TSearchDialog.SetCategoryList;
var
- i, j: integer;
+ i, j, k: integer;
Item: TListItem;
+ bbs : TBBS;
begin
Item := CategoryListView.Items.Add;
Item.Caption := '\81i\82·\82×\82Ä\81j';
Item.Data := nil;
- for i := 0 to BBS2ch.Count - 1 do begin
- Item := CategoryListView.Items.Add;
- Item.Caption := BBS2ch.Items[i].Title;
- Item.Data := BBS2ch.Items[i];
- for j := 0 to BBS2ch.Items[i].Count - 1 do
- BBS2ch.Items[i].Items[j].BoolData := False;
+ for k := 0 to Length( BBSs ) - 1 do begin
+ bbs := BBSs[ k ];
+ for i := 0 to bbs.Count - 1 do begin
+ Item := CategoryListView.Items.Add;
+ Item.Caption := bbs.Items[i].Title;
+ Item.Data := bbs.Items[i];
+ for j := 0 to bbs.Items[i].Count - 1 do
+ bbs.Items[i].Items[j].BoolData := False;
+ end;
end;
end;
procedure TSearchDialog.SetBoardList(Item: TListItem);
var
- i, j: Integer;
+ i, j, k: Integer;
NewItem: TListItem;
Category: TCategory;
+ bbs : TBBS;
begin
BoardListView.Clear;
if Item.Data = nil then begin
- for i := 0 to BBS2ch.Count - 1 do begin
- Category := BBS2ch.Items[i];
- for j := 0 to Category.Count - 1 do begin
- NewItem := BoardListView.Items.Add;
- NewItem.Caption := Category.Items[j].Title;
- NewItem.Checked := Category.Items[j].BoolData;
- NewItem.Data := Category.Items[j];
+ for k := 0 to Length( BBSs ) - 1 do begin
+ bbs := BBSs[ k ];
+ for i := 0 to bbs.Count - 1 do begin
+ Category := bbs.Items[i];
+ for j := 0 to Category.Count - 1 do begin
+ NewItem := BoardListView.Items.Add;
+ NewItem.Caption := Category.Items[j].Title;
+ NewItem.Checked := Category.Items[j].BoolData;
+ NewItem.Data := Category.Items[j];
+ end;
end;
end;
end else if TObject(Item.Data) is TCategory then begin
procedure TSearchDialog.OkBottonClick(Sender: TObject);
var
- i, j, k: Integer;
- Category: TCategory;
- Board: TBoard;
- ThreadItem: TThreadItem;
+ i : Integer;
+// i, j, k, l: Integer;
+// Category: TCategory;
+// Board: TBoard;
+// ThreadItem: TThreadItem;
List: TList;
//sl: TStringList;
SearchWord: string;
Reg: TGrep;
Filter: string;
oldText: string;
+// bbs : TBBS;
begin
// 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é
AllSelectButton.Enabled := False;
AllReleaseButton.Enabled := False;
OkBotton.Enabled := False;
- CancelBotton.Enabled := true;
+ CancelBotton.Enabled := true;
FCancel := false;
CategoryListView.Enabled := False;
Reg := TGrep.Create( nil );
try
+ // \83v\83\8d\83O\83\8c\83X\83o\81[\82ð\90Ý\92è\82µ\82Ä\8c©\82¦\82é\82æ\82¤\82É\82·\82é
+ BoardsProgressBar.Max := CountBoards;
+ BoardsProgressBar.Position := 0;
+ BoardsProgressBar.Visible := True;
+
if Length( SearchComboBox.Text ) > 0 then
begin
// ComboBox \82Ì\93à\97e\82ð\8dX\90V
SearchComboBox.Text := oldText;
BoardListView.Clear;
-
+ Application.ProcessMessages;
// grep \97p\82Ì\8c\9f\8dõ\83\8f\81[\83h\82ð\90¶\90¬
Reg.OnMatch := OnMatch;
- Reg.UseFuzzyCharDic := True;
+ Reg.UseFuzzyCharDic := FuzzyCharDicCheckBox.Checked;
If RegExpCheckBox.Checked Then
SearchWord := SearchComboBox.Text
End;
// \83T\83C\83g\82Ì\92\86\82Ì (\91±\82)
- try
- for i := 0 to BBS2ch.Count - 1 do begin
- // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82)
- Category := BBS2ch.Items[i];
- for j := 0 to Category.Count - 1 do begin
- // \94Â\82Ì\92\86\82Ì (\91±\82)
- Board := Category.Items[j];
- if not Board.IsThreadDatRead then
- GikoSys.ReadSubjectFile(Board);
- if Board.BoolData then begin
- for k := 0 to Board.Count - 1 do begin
- // \8cÂ\81X\82Ì\83X\83\8c\83b\83h\82Ì (\91±\82)
- ThreadItem := Board.Items[k];
- if FileExists( ThreadItem.GetThreadFileName ) then begin
- // \83\8d\83O\82ª\91¶\8dÝ\82·\82é
- try
- // \8c\9f\8dõ
- // \81¦\8c©\82Â\82©\82Á\82½\82ç OnMatch \82É\94ò\82Ô
- FRegItem := ThreadItem;
- Reg.GrepByRegExp( ThreadItem.GetThreadFileName )
- except
- end;
- end;
- end;
- Application.ProcessMessages;
- if FCancel then raise Exception.Create('\83\8d\83O\8c\9f\8dõ\82ð\92\86\8e~\82µ\82Ü\82·');
- end;
- end;
- end;
- except
- on E:Exception do ShowMessage(E.Message)
- end;
+ SearchLogs(Reg);
end;
finally
+ //\83v\83\8d\83O\83\8c\83X\83o\81[\82ð\89B\82·
+ BoardsProgressBar.Visible := False;
//sl.Free;
List.Free;
Screen.Cursor := crDefault;
AllReleaseButton.Enabled := True;
OkBotton.Enabled := True;
CategoryListView.Enabled := True;
- CancelBotton.Enabled := false;
- end;
+ CancelBotton.Enabled := false;
+ end;
end;
+//! \91I\91ð\82³\82ê\82½\94Â\82Ì\83X\83\8c\83b\83h\82Ì\92\86\90g\82ð\8c\9f\8dõ\82·\82é
+procedure TSearchDialog.SearchLogs( Reg: TGrep );
+var
+ i, j, k, l : Integer;
+ bbs : TBBS;
+ Category: TCategory;
+ Board: TBoard;
+begin
+ // \83T\83C\83g\82Ì\92\86\82Ì (\91±\82)
+ try
+ // \8cf\8e¦\94Â\82Ì\92\86\82Ì (\91±\82)
+ for l := 0 to Length( BBSs ) - 1 do begin
+ bbs := BBSs[ l ];
+ for i := 0 to bbs.Count - 1 do begin
+ // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82)
+ Category := bbs.Items[i];
+ for j := 0 to Category.Count - 1 do begin
+ // \94Â\82Ì\92\86\82Ì (\91±\82)
+ Board := Category.Items[j];
+ if Board.BoolData then begin
+ if not Board.IsThreadDatRead then
+ GikoSys.ReadSubjectFile(Board);
+ for k := 0 to Board.Count - 1 do begin
+ // \8cÂ\81X\82Ì\83X\83\8c\83b\83h\82Ì (\91±\82)
+ SearchLog(Reg, Board.Items[k]);
+ end;
+ BoardsProgressBar.StepIt;
+ end;
+ end;
+ end;
+ end;
+ except
+ on E:Exception do ShowMessage(E.Message)
+ end;
+end;
+//! \91I\91ð\82³\82ê\82Ä\82¢\82é\94Â\82Ì\90\94\82ð\83J\83E\83\93\83g\82·\82é
+function TSearchDialog.CountBoards : Integer;
+var
+ i, j, l : Integer;
+ bbs : TBBS;
+ Category: TCategory;
+ Board: TBoard;
+begin
+ Result := 0;
+ // \8cf\8e¦\94Â\82Ì\92\86\82Ì (\91±\82)
+ for l := 0 to Length( BBSs ) - 1 do begin
+ bbs := BBSs[ l ];
+ for i := 0 to bbs.Count - 1 do begin
+ // \83J\83e\83S\83\8a\82Ì\92\86\82Ì (\91±\82)
+ Category := bbs.Items[i];
+ for j := 0 to Category.Count - 1 do begin
+ // \94Â\82Ì\92\86\82Ì (\91±\82)
+ Board := Category.Items[j];
+ if Board.BoolData then begin
+ Inc(Result);
+ end;
+ end;
+ end;
+ end;
+end;
+//! \90³\8bK\95\\8c»\82Ì\8c\9f\8dõ\82É\83X\83\8c\83b\83h\82Ì\83\8d\83O\83t\83@\83C\83\8b\82ð\91\97\82é
+procedure TSearchDialog.SearchLog(Reg: TGrep; Item: TThreadItem);
+begin
+ // \83\8d\83O\82ª\91¶\8dÝ\82·\82é\82©\8am\94F
+ if (Item.IsLogFile) and (FileExists( Item.GetThreadFileName )) then begin
+ try
+ // \8c\9f\8dõ
+ // \81¦\8c©\82Â\82©\82Á\82½\82ç OnMatch \82É\94ò\82Ô
+ FRegItem := Item;
+ // GrepByReg\82Ì\92\86\82ÅApplication.ProcessMessage\82ª\91å\97Ê\82É\8cÄ\82Î\82ê\82Ä\82¢\82é
+ Reg.GrepByRegExp( Item.GetThreadFileName )
+ except
+ end;
+ if FCancel then raise Exception.Create('\83\8d\83O\8c\9f\8dõ\82ð\92\86\8e~\82µ\82Ü\82·');
+ end;
+end;
procedure TSearchDialog.BoardListViewDblClick(Sender: TObject);
begin
If TObject( BoardListView.Selected.Data ) is TThreadItem Then
GikoForm.InsertBrowserTab( TThreadItem(BoardListView.Selected.Data) );
+ BringToFront;
end;
procedure TSearchDialog.CancelBottonClick(Sender: TObject);
begin
-
- //Self.Close;
- FCancel := true;
-
+ TGrep(Sender).Cancel := true;
+ FCancel := true;
end;
procedure TSearchDialog.BoardListViewResize(Sender: TObject);
end;
+procedure TSearchDialog.FormDestroy(Sender: TObject);
+begin
+ if (BoardListView <> nil) then begin
+ BoardListView.Clear;
+ end;
+ if (CategoryListView <> nil) then begin
+ CategoryListView.Clear;
+ end;
+end;
+
+procedure TSearchDialog.FormCloseQuery(Sender: TObject;
+ var CanClose: Boolean);
+begin
+ if (BoardsProgressBar.Visible) then begin
+ TGrep(Sender).Cancel := true;
+ FCancel := true;
+ Application.ProcessMessages;
+ end;
+end;
+
end.