{------------------------------------------------------------------------------}
{
   Unit Name: TestDirW
   Purpose  :
   Author   : Timo Lappalainen
   Date     : 07.08.00
   Changed  :

   ToDo     :            
} 
{------------------------------------------------------------------------------}

unit TestDirW;

interface

uses
  DirWatch,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TFormDirWatch = class(TForm)
    bStop: TButton;
    bAdd: TButton;
    edDir: TEdit;
    lbWatch: TListBox;
    bWatch: TButton;
    bRemove: TButton;
    ButtonAddFile: TButton;
    EditFilename: TEdit;
    procedure bStopClick(Sender: TObject);
    procedure bAddClick(Sender: TObject);
    procedure bWatchClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure bRemoveClick(Sender: TObject);
    procedure ButtonAddFileClick(Sender: TObject);
  private
    procedure DirChange(sender:TDirWatch);
    function GetWatch(i: integer): TDirWatch;
    function GetStr(i: integer): string;
    procedure SetStr(i: integer; const Value: string);
  public
    property Watch[i:integer]:TDirWatch read GetWatch;
    property Str[i:integer]:string read GetStr write SetStr;
  end;

var
  FormDirWatch: TFormDirWatch;

implementation

{$R *.DFM}

procedure TFormDirWatch.bStopClick(Sender: TObject);
var
  i:integer;
begin
     for i:=0 to lbWatch.Items.Count-1 do if lbWatch.selected[i] then begin
         Watch[i].Stop;
         Str[i]:=Watch[i].AsString+'  Stopped';
     end;
end;

procedure TFormDirWatch.DirChange(sender:TDirWatch);
var
  i:integer;
  DWItem:TDirWatch;
begin
   for i := 0 to lbWatch.Items.Count-1 do begin
     DWItem:=Watch[i];
     if ( DWItem = sender ) then begin
       Str[i]:=DWItem.AsString + '  Changed at ' + TimeToStr(Time);
       break;
     end;
   end;
end;

procedure TFormDirWatch.bAddClick(Sender: TObject);
var
  DirWatch:TDirWatch;
begin
   DirWatch:=TDirWatch.Create;
   DirWatch.Dir:=edDir.text;
   DirWatch.OnChange := DirChange;
   lbWatch.Items.AddObject(DirWatch.AsString+' started',DirWatch);

   DirWatch.Watch;
end;

procedure TFormDirWatch.bWatchClick(Sender: TObject);
var
  i:integer;
begin
   for i:=0 to lbWatch.Items.Count-1 do if lbWatch.selected[i] then begin
       Watch[i].Watch;
       Str[i] := Watch[i].AsString + '  Started';
   end;
end;

procedure TFormDirWatch.bRemoveClick(Sender: TObject);
var
  i:integer;
begin
   i:=lbWatch.Items.Count-1;
   while i>=0 do begin
     if lbWatch.selected[i] then begin
       Watch[i].Free;
       lbWatch.Items.Delete(i);
     end;
     dec(i);
   end;
end;

procedure TFormDirWatch.FormDestroy(Sender: TObject);
var
  i : integer;
begin
   i:=lbWatch.Items.Count-1;
   while i>=0 do begin
     Watch[i].Free;
     lbWatch.Items.Delete(i);
     dec(i);
   end;
end;

procedure TFormDirWatch.FormCreate(Sender: TObject);
begin
  if ParamCount>0 then edDir.text:=ParamStr(1);
end;

function TFormDirWatch.GetWatch(i: integer): TDirWatch;
begin
  Result := TDirWatch(lbWatch.Items.Objects[i]);
end;

function TFormDirWatch.GetStr(i: integer): string;
begin
  Result := lbWatch.Items[i];
end;

procedure TFormDirWatch.SetStr(i: integer; const Value: string);
begin
  lbWatch.Items[i] := value;
end;

procedure TFormDirWatch.ButtonAddFileClick(Sender: TObject);
var
  FWatch:TFileWatch;
begin
  FWatch:=TFileWatch.Create;
  FWatch.Dir := edDir.text;
  FWatch.OnChange := DirChange;
  FWatch.FileName := EditFileName.Text;
  lbWatch.Items.AddObject(FWatch.AsString+' started',FWatch);

  FWatch.Watch;
end;

initialization begin
end;

end.
