unit registryuserpreferences;
{
  $Id: registryuserpreferences.pas,v 1.1 2004/09/30 22:35:47 savage Exp $
  
}
{******************************************************************************}
{                                                                              }
{          JEDI-SDL : Pascal units for SDL - Simple DirectMedia Layer          }
{             Wrapper class for Windows Register and INI Files                 }
{                                                                              }
{ The initial developer of this Pascal code was :                              }
{ Dominqiue Louis <Dominique@SavageSoftware.com.au>                            }
{                                                                              }
{ Portions created by Dominqiue Louis are                                      }
{ Copyright (C) 2000 - 2001 Dominqiue Louis.                                   }
{                                                                              }
{                                                                              }
{ Contributor(s)                                                               }
{ --------------                                                               }
{                                                                              }
{                                                                              }
{ Obtained through:                                                            }
{ Joint Endeavour of Delphi Innovators ( Project JEDI )                        }
{                                                                              }
{ You may retrieve the latest version of this file at the Project              }
{ JEDI home page, located at http://delphi-jedi.org                            }
{                                                                              }
{ The contents of this file are used with permission, subject to               }
{ the Mozilla Public License Version 1.1 (the "License"); you may              }
{ not use this file except in compliance with the License. You may             }
{ obtain a copy of the License at                                              }
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
{                                                                              }
{ Software distributed under the License is distributed on an                  }
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or               }
{ implied. See the License for the specific language governing                 }
{ rights and limitations under the License.                                    }
{                                                                              }
{ Description                                                                  }
{ -----------                                                                  }
{                                                                              }
{                                                                              }
{                                                                              }
{                                                                              }
{                                                                              }
{                                                                              }
{                                                                              }
{ Requires                                                                     }
{ --------                                                                     }
{   The SDL Runtime libraris on Win32  : SDL.dll on Linux : libSDL.so          }
{   They are available from...                                                 }
{   http://www.libsdl.org .                                                    }
{                                                                              }
{ Programming Notes                                                            }
{ -----------------                                                            }
{                                                                              }
{                                                                              }
{                                                                              }
{                                                                              }
{ Revision History                                                             }
{ ----------------                                                             }
{   September   23 2004 - DL : Initial Creation                                }
{
  $Log: registryuserpreferences.pas,v $
  Revision 1.1  2004/09/30 22:35:47  savage
  Changes, enhancements and additions as required to get SoAoS working.


}
{******************************************************************************}

interface

uses
  {$IFDEF REG}
  Registry,
  {$ELSE}
  IniFiles,
  {$ENDIF}
  Classes,
  userpreferences;

type
  TRegistryUserPreferences = class( TUserPreferences )
  private

  protected
    function GetSection( const Index : Integer ) : string; virtual; abstract;
    function GetIdentifier( const Index : Integer ) : string; virtual; abstract;
    function GetDefaultBoolean( const Index : Integer ) : Boolean; override;
    function GetBoolean( const Index : Integer ) : Boolean; override;
    procedure SetBoolean( const Index : Integer; const Value : Boolean ); override;
    function GetDefaultDateTime( const Index : Integer ) : TDateTime; override;
    function GetDateTime( const Index : Integer ) : TDateTime; override;
    procedure SetDateTime( const Index : Integer; const Value : TDateTime ); override;
    function GetDefaultInteger( const Index : Integer ) : Integer; override;
    function GetInteger( const Index : Integer ) : Integer; override;
    procedure SetInteger( const Index : Integer; const Value : Integer ); override;
    function GetDefaultFloat( const Index : Integer ) : single; override;
    function GetFloat( const Index : Integer ) : single; override;
    procedure SetFloat( const Index : Integer; const Value : single ); override;
    function GetDefaultString( const Index : Integer ) : string; override;
    function GetString( const Index : Integer ) : string; override;
    procedure SetString( const Index : Integer; const Value : string ); override;
  public
    Registry : {$IFDEF REG}TRegIniFile{$ELSE}TIniFile{$ENDIF};
    constructor Create( const FileName : string = '' ); reintroduce;
    destructor Destroy; override;
    procedure Update; override;
  end;

implementation

uses
  SysUtils;

{ TRegistryUserPreferences }
constructor TRegistryUserPreferences.Create( const FileName : string );
var
  defFileName : string;
begin
  inherited Create;

  if FileName <> '' then
    defFileName := FileName
  else
    defFileName := ChangeFileExt( ParamStr( 0 ), '.ini' );

  Registry := {$IFDEF REG}TRegIniFile{$ELSE}TIniFile{$ENDIF}.Create( defFileName );
end;

destructor TRegistryUserPreferences.Destroy;
begin
  Update;
  Registry.Free;
  Registry := nil;
  inherited;
end;

function TRegistryUserPreferences.GetBoolean( const Index : Integer ) : Boolean;
begin
  Result := Registry.ReadBool( GetSection( Index ), GetIdentifier( Index ), GetDefaultBoolean( Index ) );
end;

function TRegistryUserPreferences.GetDateTime( const Index : Integer ): TDateTime;
begin
  Result := Registry.ReadDateTime( GetSection( Index ){$IFNDEF REG}, GetIdentifier( Index ), GetDefaultDateTime( Index ){$ENDIF} );
end;

function TRegistryUserPreferences.GetDefaultBoolean( const Index : Integer ) : Boolean;
begin
  result := false;
end;

function TRegistryUserPreferences.GetDefaultDateTime( const Index: Integer ) : TDateTime;
begin
  result := Now;
end;

function TRegistryUserPreferences.GetDefaultFloat( const Index: Integer ) : single;
begin
  result := 0.0;
end;

function TRegistryUserPreferences.GetDefaultInteger(const Index : Integer ) : Integer;
begin
  result := 0;
end;

function TRegistryUserPreferences.GetDefaultString( const Index : Integer ) : string;
begin
  result := '';
end;

function TRegistryUserPreferences.GetFloat( const Index : Integer ): single;
begin
  Result := Registry.ReadFloat( GetSection( Index ){$IFNDEF REG}, GetIdentifier( Index ), GetDefaultFloat( Index ){$ENDIF} );
end;

function TRegistryUserPreferences.GetInteger( const Index : Integer ) : Integer;
begin
  Result := Registry.ReadInteger( GetSection( Index ), GetIdentifier( Index ), GetDefaultInteger( Index )  );
end;

function TRegistryUserPreferences.GetString( const Index : Integer ): string;
begin
  Result := Registry.ReadString( GetSection( Index ), GetIdentifier( Index ), GetDefaultString( Index ) );
end;

procedure TRegistryUserPreferences.SetBoolean( const Index : Integer; const Value : Boolean );
begin
  Registry.WriteBool( GetSection( Index ), GetIdentifier( Index ), Value );
  inherited;
end;

procedure TRegistryUserPreferences.SetDateTime( const Index: Integer; const Value: TDateTime );
begin
  Registry.WriteDateTime( GetSection( Index ){$IFNDEF REG}, GetIdentifier( Index ){$ENDIF}, Value );
  inherited;
end;

procedure TRegistryUserPreferences.SetFloat(const Index: Integer; const Value: single);
begin
  Registry.WriteFloat( GetSection( Index ){$IFNDEF REG}, GetIdentifier( Index ){$ENDIF}, Value );
  inherited;
end;

procedure TRegistryUserPreferences.SetInteger( const Index, Value : Integer );
begin
  Registry.WriteInteger( GetSection( Index ), GetIdentifier( Index ), Value );
  inherited;
end;

procedure TRegistryUserPreferences.SetString( const Index : Integer; const Value : string );
begin
  Registry.WriteString( GetSection( Index ), GetIdentifier( Index ), Value );
  inherited;
end;

procedure TRegistryUserPreferences.Update;
begin
  {$IFDEF REG}
  Registry.CloseKey;
  {$ELSE}
  Registry.UpdateFile;
  {$ENDIF}
end;

end.