unit JVCLConfiguration;

interface

uses
  SysUtils, Classes, DelphiData, ConfigurationBase, ConfigOptions;

type
  TJVCLConfiguration = class(TConfiguration)
  private
    FJCLDirectory: string;
  protected
    function GetName: string; override;
    function GetVersionStr: string; override;
  public
    constructor Create;
    function SupportsPersonality(Personality: TIDEPersonality): Boolean; override;
    function IsUpToDate(IDE: TDelphiIDE): Boolean; override;
    function CreateOptionsFor(Personality: TIDEPersonality): TPersonalityOptions; override;
  published
    property JCLDirectory: string read FJCLDirectory write FJCLDirectory;
  end;

  TJVCLPersonalityOptions = class(TPersonalityOptions)
  public
    constructor Create(APersonality: TIDEPersonality);
    function GetTabOptions(Index: Integer): TOptionList; override;
  end;

const
  Product = 'JVCL'; // do not localize
  ProductVersion = '3.3'; // do not localize

resourcestring
  RsJCLDirectoryCaption = '&JCL Directory:';
  RsJCLDirectoryHint = 'The JVCL Installer requires a JCL source directory.';
  RsJvclIncOptions = 'jvcl.inc Options';

implementation

{ TJVCLConfiguration }

constructor TJVCLConfiguration.Create;
begin

end;

function TJVCLConfiguration.GetVersionStr: string;
begin
  Result := ProductVersion;
end;

function TJVCLConfiguration.GetName: string;
begin
  Result := Product;
end;

function TJVCLConfiguration.SupportsPersonality(Personality: TIDEPersonality): Boolean;
begin
  case Personality.IDE.Version of
    5:
      Result := Personality.ClassType = TDelphiPersonality;
    6, 7:
      Result := ((Personality.ClassType = TDelphiPersonality) or
                 (Personality.ClassType = TCppPersonality)) and
                (Pos('VisualCLX', Personality.Name) = 0); // VisualCLX is not supported at the moment // do not localize
    9:
      Result := (Personality.ClassType = TDelphiPersonality) or
                (Personality.ClassType = TDotNetPersonality);
    10:
      Result := (Personality.ClassType = TDelphiCppPersonality) or
                (Personality.ClassType = TDotNetPersonality);
  else
    Result := False;
  end;
end;

function TJVCLConfiguration.IsUpToDate(IDE: TDelphiIDE): Boolean;
begin
  if IDE.Version = 6 then
    Result := IDE.LatestUpdate >= 2
  else
    Result := True;
end;

function TJVCLConfiguration.CreateOptionsFor(Personality: TIDEPersonality): TPersonalityOptions;
begin
  Result := TJVCLPersonalityOptions.Create(Personality);
end;

{ TJVCLPersonalityOptions }

constructor TJVCLPersonalityOptions.Create(APersonality: TIDEPersonality);
begin
  inherited Create(APersonality);
  SetWasInstalled(Personality.FindPackageEx('Jv') <> nil);
  TabNames.Add(RsJvclIncOptions);
end;

function TJVCLPersonalityOptions.GetTabOptions(Index: Integer): TOptionList;
begin
  Result := inherited GetTabOptions(Index);
  case Index of
    0: // Directories
      begin
        Result.Add(TOptionSpacer.Create);
        // add global JCLDirectory option
        Result.Add(TOptionDirectoryEdit.Create(Configuration, 'JCLDirectory',
          RsJCLDirectoryCaption, RsJCLDirectoryHint));
      end;

    1: ;// Compiler Options

    2: ;// jvcl.inc Options
  end;
end;

initialization
  Configuration := TJVCLConfiguration.Create;

end.
