unitsettingsdialog.pas 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. unit unitSettingsDialog;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  6. StdCtrls, Buttons, IniFiles;
  7. type
  8. TSettingsDialog = class(TForm)
  9. private
  10. lblDataDir: TLabel;
  11. edtDataDir: TEdit;
  12. btnBrowse: TButton;
  13. chkPdfCovers: TCheckBox;
  14. btnOK: TBitBtn;
  15. btnCancel: TBitBtn;
  16. procedure FormCreate(Sender: TObject);
  17. procedure BtnBrowseClick(Sender: TObject);
  18. procedure BtnOKClick(Sender: TObject);
  19. function ConfigDir: String;
  20. function ConfigPath: String;
  21. procedure LoadSettings;
  22. procedure SaveSettings;
  23. public
  24. end;
  25. var
  26. SettingsDialog: TSettingsDialog;
  27. implementation
  28. {$R *.lfm}
  29. procedure TSettingsDialog.FormCreate(Sender: TObject);
  30. begin
  31. Caption := 'Settings';
  32. BorderStyle := bsDialog;
  33. Position := poScreenCenter;
  34. ClientWidth := 520; ClientHeight := 180;
  35. lblDataDir := TLabel.Create(Self); lblDataDir.Parent := Self;
  36. lblDataDir.Caption := 'Data folder (where data.dat is saved):';
  37. lblDataDir.Left := 16; lblDataDir.Top := 16;
  38. edtDataDir := TEdit.Create(Self); edtDataDir.Parent := Self;
  39. edtDataDir.Left := 16; edtDataDir.Top := 40; edtDataDir.Width := 410;
  40. btnBrowse := TButton.Create(Self); btnBrowse.Parent := Self;
  41. btnBrowse.Left := 436; btnBrowse.Top := 38; btnBrowse.Caption := 'Browse...';
  42. btnBrowse.OnClick := @BtnBrowseClick;
  43. chkPdfCovers := TCheckBox.Create(Self); chkPdfCovers.Parent := Self;
  44. chkPdfCovers.Caption := 'Auto-extract PDF cover on import (requires pdftoppm)';
  45. chkPdfCovers.Left := 16; chkPdfCovers.Top := 80;
  46. btnOK := TBitBtn.Create(Self); btnOK.Parent := Self;
  47. btnOK.Kind := bkOK; btnOK.Left := ClientWidth - 180; btnOK.Top := 130;
  48. btnOK.OnClick := @BtnOKClick;
  49. btnCancel := TBitBtn.Create(Self); btnCancel.Parent := Self;
  50. btnCancel.Kind := bkCancel; btnCancel.Left := ClientWidth - 92; btnCancel.Top := 130;
  51. LoadSettings;
  52. end;
  53. procedure TSettingsDialog.BtnBrowseClick(Sender: TObject);
  54. var dir: String;
  55. begin
  56. dir := edtDataDir.Text;
  57. if SelectDirectory('Choose data folder', '', dir) then
  58. edtDataDir.Text := dir;
  59. end;
  60. procedure TSettingsDialog.BtnOKClick(Sender: TObject);
  61. begin
  62. SaveSettings;
  63. ModalResult := mrOK;
  64. end;
  65. function TSettingsDialog.ConfigDir: String;
  66. begin
  67. {$IFDEF MSWINDOWS}
  68. Result := GetEnvironmentVariableUTF8('APPDATA') + DirectorySeparator + 'mybookshelf' + DirectorySeparator;
  69. {$ENDIF}
  70. {$IFDEF UNIX}
  71. Result := GetEnvironmentVariableUTF8('HOME') + DirectorySeparator + '.mybookshelf' + DirectorySeparator;
  72. {$ENDIF}
  73. if not DirectoryExistsUTF8(Result) then CreateDirUTF8(Result);
  74. end;
  75. function TSettingsDialog.ConfigPath: String;
  76. begin
  77. Result := ConfigDir + 'config.ini';
  78. end;
  79. procedure TSettingsDialog.LoadSettings;
  80. var ini: TIniFile;
  81. begin
  82. ini := TIniFile.Create(ConfigPath);
  83. try
  84. edtDataDir.Text := ini.ReadString('general', 'data_dir', '');
  85. chkPdfCovers.Checked := ini.ReadBool('general', 'auto_pdf_cover', True);
  86. finally
  87. ini.Free;
  88. end;
  89. end;
  90. procedure TSettingsDialog.SaveSettings;
  91. var ini: TIniFile;
  92. begin
  93. ini := TIniFile.Create(ConfigPath);
  94. try
  95. ini.WriteString('general', 'data_dir', edtDataDir.Text);
  96. ini.WriteBool('general', 'auto_pdf_cover', chkPdfCovers.Checked);
  97. finally
  98. ini.Free;
  99. end;
  100. end;
  101. end.