unitsettingsdialog.pas 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. unit unitSettingsDialog;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  6. StdCtrls, Buttons, IniFiles, LazFileUtils;
  7. type
  8. TSettingsDialog = class(TForm)
  9. private
  10. lblDataDir: TLabel;
  11. edtDataDir: TEdit;
  12. btnBrowse: TButton;
  13. lblBooksDir: TLabel;
  14. edtBooksDir: TEdit;
  15. btnBrowseBooks: TButton;
  16. chkCopyBooks: TCheckBox;
  17. chkRenameBooks: TCheckBox;
  18. chkMeta: TCheckBox;
  19. chkPdfCovers: TCheckBox;
  20. btnOK: TBitBtn;
  21. btnCancel: TBitBtn;
  22. procedure FormCreate(Sender: TObject);
  23. procedure BtnBrowseClick(Sender: TObject);
  24. procedure BtnBrowseBooksClick(Sender: TObject);
  25. procedure BtnOKClick(Sender: TObject);
  26. function ConfigDir: String;
  27. function ConfigPath: String;
  28. procedure LoadSettings;
  29. procedure SaveSettings;
  30. public
  31. constructor Create(AOwner: TComponent); override;
  32. end;
  33. var
  34. SettingsDialog: TSettingsDialog;
  35. implementation
  36. {$R *.lfm}
  37. constructor TSettingsDialog.Create(AOwner: TComponent);
  38. begin
  39. inherited Create(AOwner);
  40. FormCreate(Self);
  41. end;
  42. procedure TSettingsDialog.FormCreate(Sender: TObject);
  43. begin
  44. Caption := 'Settings';
  45. BorderStyle := bsDialog;
  46. Position := poScreenCenter;
  47. ClientWidth := 520; ClientHeight := 300;
  48. lblDataDir := TLabel.Create(Self); lblDataDir.Parent := Self;
  49. lblDataDir.Caption := 'Data folder (where books.xml is saved):';
  50. lblDataDir.Left := 16; lblDataDir.Top := 16;
  51. edtDataDir := TEdit.Create(Self); edtDataDir.Parent := Self;
  52. edtDataDir.Left := 16; edtDataDir.Top := 40; edtDataDir.Width := 410;
  53. btnBrowse := TButton.Create(Self); btnBrowse.Parent := Self;
  54. btnBrowse.Left := 436; btnBrowse.Top := 38; btnBrowse.Caption := 'Browse...';
  55. btnBrowse.OnClick := @BtnBrowseClick;
  56. lblBooksDir := TLabel.Create(Self); lblBooksDir.Parent := Self;
  57. lblBooksDir.Caption := 'Managed books folder:';
  58. lblBooksDir.Left := 16; lblBooksDir.Top := 80;
  59. edtBooksDir := TEdit.Create(Self); edtBooksDir.Parent := Self;
  60. edtBooksDir.Left := 16; edtBooksDir.Top := 104; edtBooksDir.Width := 410;
  61. btnBrowseBooks := TButton.Create(Self); btnBrowseBooks.Parent := Self;
  62. btnBrowseBooks.Left := 436; btnBrowseBooks.Top := 102; btnBrowseBooks.Caption := 'Browse...';
  63. btnBrowseBooks.OnClick := @BtnBrowseBooksClick;
  64. chkCopyBooks := TCheckBox.Create(Self); chkCopyBooks.Parent := Self;
  65. chkCopyBooks.Caption := 'Copy books to managed folder on import';
  66. chkCopyBooks.Left := 16; chkCopyBooks.Top := 144;
  67. chkRenameBooks := TCheckBox.Create(Self); chkRenameBooks.Parent := Self;
  68. chkRenameBooks.Caption := 'Rename books based on metadata';
  69. chkRenameBooks.Left := 16; chkRenameBooks.Top := 168;
  70. chkMeta := TCheckBox.Create(Self); chkMeta.Parent := Self;
  71. chkMeta.Caption := 'Extract metadata from book files';
  72. chkMeta.Left := 16; chkMeta.Top := 192;
  73. chkPdfCovers := TCheckBox.Create(Self); chkPdfCovers.Parent := Self;
  74. chkPdfCovers.Caption := 'Auto-extract PDF cover on import (requires pdftoppm)';
  75. chkPdfCovers.Left := 16; chkPdfCovers.Top := 216;
  76. btnOK := TBitBtn.Create(Self); btnOK.Parent := Self;
  77. btnOK.Kind := bkOK; btnOK.Left := ClientWidth - 180; btnOK.Top := 248;
  78. btnOK.OnClick := @BtnOKClick;
  79. btnCancel := TBitBtn.Create(Self); btnCancel.Parent := Self;
  80. btnCancel.Kind := bkCancel; btnCancel.Left := ClientWidth - 92; btnCancel.Top := 248;
  81. LoadSettings;
  82. end;
  83. procedure TSettingsDialog.BtnBrowseClick(Sender: TObject);
  84. var dir: String;
  85. begin
  86. dir := edtDataDir.Text;
  87. if SelectDirectory('Choose data folder', '', dir) then
  88. edtDataDir.Text := dir;
  89. end;
  90. procedure TSettingsDialog.BtnBrowseBooksClick(Sender: TObject);
  91. var dir: String;
  92. begin
  93. dir := edtBooksDir.Text;
  94. if SelectDirectory('Choose books folder', '', dir) then
  95. edtBooksDir.Text := dir;
  96. end;
  97. procedure TSettingsDialog.BtnOKClick(Sender: TObject);
  98. begin
  99. SaveSettings;
  100. ModalResult := mrOK;
  101. end;
  102. function TSettingsDialog.ConfigDir: String;
  103. begin
  104. Result := IncludeTrailingPathDelimiter(GetAppConfigDirUTF8(False));
  105. if not DirectoryExistsUTF8(Result) then CreateDirUTF8(Result);
  106. end;
  107. function TSettingsDialog.ConfigPath: String;
  108. begin
  109. Result := ConfigDir + 'config.ini';
  110. end;
  111. procedure TSettingsDialog.LoadSettings;
  112. var ini: TIniFile;
  113. begin
  114. ini := TIniFile.Create(ConfigPath);
  115. try
  116. edtDataDir.Text := ini.ReadString('general', 'data_dir', '');
  117. edtBooksDir.Text := ini.ReadString('general', 'books_dir', edtDataDir.Text);
  118. chkCopyBooks.Checked := ini.ReadBool('general', 'copy_books', True);
  119. chkRenameBooks.Checked := ini.ReadBool('general', 'rename_books', True);
  120. chkMeta.Checked := ini.ReadBool('general', 'extract_metadata', True);
  121. chkPdfCovers.Checked := ini.ReadBool('general', 'auto_pdf_cover', True);
  122. finally
  123. ini.Free;
  124. end;
  125. end;
  126. procedure TSettingsDialog.SaveSettings;
  127. var ini: TIniFile;
  128. begin
  129. ini := TIniFile.Create(ConfigPath);
  130. try
  131. ini.WriteString('general', 'data_dir', edtDataDir.Text);
  132. ini.WriteString('general', 'books_dir', edtBooksDir.Text);
  133. ini.WriteBool('general', 'copy_books', chkCopyBooks.Checked);
  134. ini.WriteBool('general', 'rename_books', chkRenameBooks.Checked);
  135. ini.WriteBool('general', 'extract_metadata', chkMeta.Checked);
  136. ini.WriteBool('general', 'auto_pdf_cover', chkPdfCovers.Checked);
  137. finally
  138. ini.Free;
  139. end;
  140. end;
  141. end.