{------------------------------------------------------------------------------}
{
   Unit Name: ktrans
   Purpose  : A translator component that finds his Dictionary automatically
   Author   : Vesa Lappalainen
   Date     : -98
   Changed  :

   ToDo     :

   Usage:
    - to use this component on global TM-named modele TTM must exist
}
{------------------------------------------------------------------------------}

unit ktrans;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  IvMulti, IvEMulti;


type
  TkTranslator = class(TIvExtendedTranslator)
  private
    FRestrictions : TStrings;
  protected
    { Protected declarations }
  public
    { Public declarations }
    procedure Loaded; override;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy;                  override;
    procedure SetRestrictions(const s:TStrings); virtual;
    procedure TranslatorRestrictComponent(translator: TIvTranslator;
      component: TComponent; var restrictions: TIvRestrictions);
    procedure EndUpdate(sender:TObject);
  published
    { Published declarations }
    property SRestrictions : TStrings read FRestrictions write SetRestrictions;
  end;

procedure Register;

implementation
uses TransMod;

constructor TkTranslator.Create(AOwner: TComponent);
begin
  inherited;
//  AutoOpen := false;
  Options := Options - [ivtoAutoOpen];
  FRestrictions := TStringList.Create;
  (FRestrictions as TStringList).OnChange := EndUpdate;
end;

destructor TkTranslator.Destroy;
begin
  FRestrictions.Free;
  inherited;
end;

procedure TkTranslator.Loaded;
begin
  inherited;
  InitTranslate(self);
end;

procedure TkTranslator.TranslatorRestrictComponent(translator: TIvTranslator;
  component: TComponent; var restrictions: TIvRestrictions);
var i:integer;
begin
  for i:=0 to FRestrictions.Count-1 do
    if ( FRestrictions.Strings[i] = component.Name ) then begin
      restrictions := [ivrBuildInTranslation,ivrCustomTranslation];
      Exit;
    end;
end;

procedure TkTranslator.EndUpdate(sender:TObject);
begin
  if ( FRestrictions.Count >0 ) then
    OnRestrictComponent := TranslatorRestrictComponent
  else
    OnRestrictComponent := nil;
end;

procedure TkTranslator.SetRestrictions(const s:TStrings);
begin
  if ( s.Text = FRestrictions.Text ) then exit;
  FRestrictions.Assign(s);
end;


procedure Register;
begin
  RegisterComponents('Kave2000', [TkTranslator]);
end;

end.
