lazarus/components/wiki/test/wikisearchmain.pas
mattias dbab7ecefd wiki test: search on idle
git-svn-id: trunk@35741 -
2012-03-05 16:28:59 +00:00

144 lines
3.7 KiB
ObjectPascal

unit WikiSearchMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LazLogger, LazUTF8, IpHtml, Forms, Controls,
Graphics, Dialogs, StdCtrls, ExtCtrls, WikiHelpManager;
type
{ TWikiSearchDemoForm }
TWikiSearchDemoForm = class(TForm)
LanguagesEdit: TEdit;
LanguagesLabel: TLabel;
PageIpHtmlPanel: TIpHtmlPanel;
ProgressLabel: TLabel;
MainGroupBox: TGroupBox;
ResultsIpHtmlPanel: TIpHtmlPanel;
SearchEdit: TEdit;
SearchLabel: TLabel;
Splitter1: TSplitter;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure LanguagesEditChange(Sender: TObject);
procedure OnIdle(Sender: TObject; var {%H-}Done: Boolean);
procedure SearchEditChange(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure WikiHelpScanned(Sender: TObject);
procedure WikiHelpSearched(Sender: TObject);
private
fLastSearchText: string;
fLastLanguages: string;
FIdleConnected: boolean;
procedure SearchParamsChanged;
procedure SetIdleConnected(AValue: boolean);
procedure UpdateProgress;
public
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
end;
var
WikiSearchDemoForm: TWikiSearchDemoForm;
implementation
{$R *.lfm}
{ TWikiSearchDemoForm }
procedure TWikiSearchDemoForm.FormCreate(Sender: TObject);
begin
Caption:='Search Wiki (Proof of concept)';
SearchLabel.Caption:='Search:';
SearchEdit.Text:='Documentation';
SearchEdit.Hint:='Type one or more words separated by space, use " for phrases with spaces';
LanguagesLabel.Caption:='Languages:';
LanguagesEdit.Text:='';
LanguagesEdit.Hint:='Empty for only original/untranslated pages, "de" to include german pages, "-,de" for german pages only';
MainGroupBox.Caption:='Result:';
WikiHelp:=TWikiHelp.Create(nil);
WikiHelp.XMLDirectory:=SetDirSeparators('../wikixml');
WikiHelp.ImagesDirectory:=SetDirSeparators('../images');
WikiHelp.Converter.OutputDir:='';
WikiHelp.Converter.CSSFilename:='wiki.css';
WikiHelp.OnScanned:=@WikiHelpScanned;
WikiHelp.OnSearched:=@WikiHelpSearched;
WikiHelp.StartLoading;
end;
procedure TWikiSearchDemoForm.FormDestroy(Sender: TObject);
begin
FreeAndNil(WikiHelp);
end;
procedure TWikiSearchDemoForm.LanguagesEditChange(Sender: TObject);
begin
IdleConnected:=true;
end;
procedure TWikiSearchDemoForm.OnIdle(Sender: TObject; var Done: Boolean);
begin
SearchParamsChanged;
IdleConnected:=false;
end;
procedure TWikiSearchDemoForm.SearchEditChange(Sender: TObject);
begin
IdleConnected:=true;
end;
procedure TWikiSearchDemoForm.Timer1Timer(Sender: TObject);
begin
ProgressLabel.Caption:=WikiHelp.GetProgressCaption;
Timer1.Enabled:=WikiHelp.Busy;
end;
procedure TWikiSearchDemoForm.WikiHelpScanned(Sender: TObject);
begin
UpdateProgress;
end;
procedure TWikiSearchDemoForm.WikiHelpSearched(Sender: TObject);
begin
UpdateProgress;
end;
procedure TWikiSearchDemoForm.SearchParamsChanged;
var
NewSearchText: String;
NewLanguages: String;
begin
NewSearchText:=UTF8Trim(SearchEdit.Text);
NewLanguages:=UTF8Trim(LanguagesEdit.Text);
if (NewSearchText=fLastSearchText) and (NewLanguages=fLastLanguages) then
exit;
WikiHelp.Search(NewSearchText,NewLanguages);
Timer1.Enabled:=true;
end;
procedure TWikiSearchDemoForm.SetIdleConnected(AValue: boolean);
begin
if FIdleConnected=AValue then Exit;
FIdleConnected:=AValue;
if IdleConnected then
Application.AddOnIdleHandler(@OnIdle)
else
Application.RemoveOnIdleHandler(@OnIdle);
end;
procedure TWikiSearchDemoForm.UpdateProgress;
begin
ProgressLabel.Caption:=WikiHelp.GetProgressCaption;
Timer1.Enabled:=WikiHelp.Busy;
end;
end.