{$mode objfpc}
{$H+}
unit fpdeopts;

Interface

uses SysUtils,IniFiles;

Var
  SkipEmptyNodes   : Boolean;  
  ConfirmDelete    : Boolean;
  CreateBackup     : Boolean;
  MaxRecentUsed    : Integer;
  BackupExtension  : String;  
  DefaultExtension : String;

Procedure LoadOptions;
Procedure SaveOptions;
Function  GetOptionFileName : String;

Implementation

Const
  DefFilename         = 'fpde.ini';
  SecPrefs            = 'Preferences';
  KeySkipEmptyNodes   = 'SkipEmptyNodes';
  KeyConfirmDelete    = 'ConfirmDelete';
  KeyCreateBackup     = 'CreateBackup';
  KeyBackupExtension  = 'BackupExtension';  
  KeyDefaultExtension = 'DefaultExtension';
  KeyMaxRecentUsed    = 'MaxMRUitems';
  
{$ifndef win32}
Function GetOptionFileName : String;

Const
  fpdedir = '.fpde';

Var
  HomeDir : String;

begin
  HomeDir:=GetEnvironmentVariable('HOME');
  If (HomeDir<>'') then
    begin
    HomeDir:=IncludeTrailingPathDelimiter(HomeDir)+fpdedir;
    If not DirectoryExists(HomeDir) then
      If Not CreateDir(HomeDir) then
        HomeDir:=''
      else
        HomeDir:=HomeDir;  
    end;
  Result:=IncludeTrailingPathDelimiter(HomeDir)+DefFileName;
end;

{$else}

Function GetOptionFileName : String;

begin
  Result:=ExtractFilePath(Paramstr(0))+DefFileName;  
end;
{$endif}

Procedure LoadOptions;

begin
  With TInifile.Create(GetOptionFileName) do
    Try
      SkipEmptyNodes:=ReadBool(SecPrefs,KeySkipEmptyNodes,SkipEmptyNodes);
      ConfirmDelete:=ReadBool(SecPrefs,KeyConfirmDelete,ConfirmDelete);
      CreateBackup:=ReadBool(SecPrefs,KeyCreateBackup,CreateBackup);
      BackupExtension:=ReadString(SecPrefs,KeyBackupExtension,BackupExtension);
      DefaultExtension:=ReadString(SecPrefs,KeyDefaultExtension,DefaultExtension);
    finally
      Free;
    end;
end;

Procedure SaveOptions;

begin
  With TInifile.Create(GetOptionFileName) do
    Try
      WriteBool(SecPrefs,KeySkipEmptyNodes,SkipEmptyNodes);
      WriteBool(SecPrefs,KeyConfirmDelete,ConfirmDelete);
      WriteBool(SecPrefs,KeyCreateBackup,CreateBackup);
      WriteString(SecPrefs,KeyBackupExtension,BackupExtension);
      WriteString(SecPrefs,KeyDefaultExtension,DefaultExtension);
      UpdateFile;
    finally
      Free;
    end;
end;

Initialization
  SkipEmptyNodes   := True;
  ConfirmDelete    := True;
  CreateBackup     := True;
  BackupExtension  := '.~xml';
  DefaultExtension := '.xml';
  MaxRecentUSed    := 10;
end.
