root/trunk/Units/unit_Settings.pas

475479
77
    FDeviceDir: string;
77
    FDeviceDir: string;
78
78
79
    // SYSTEM_SECTION
79
    // SYSTEM_SECTION
80
    FTransliterate: Boolean;
80
    // TODO : REMOVE FTransliterate: Boolean;
81
    FActiveCollection: Integer;
81
    FActiveCollection: Integer;
82
    FDoCheckUpdate: Boolean;
82
    FDoCheckUpdate: Boolean;
83
    FCheckExternalLibUpdate: Boolean;
83
    FCheckExternalLibUpdate: Boolean;
...
...
86
    FFileNameTemplate: string;
86
    FFileNameTemplate: string;
87
    FExportMode: TExportMode;
87
    FExportMode: TExportMode;
88
    FRemoveSquareBrackets: Boolean;
88
    FRemoveSquareBrackets: Boolean;
89
    FUseSystemTemp: Boolean;
90
    FTXTEncoding: TTXTEncoding;
89
    FTXTEncoding: TTXTEncoding;
91
90
92
    // INTERFACE_SECTION
91
    // INTERFACE_SECTION
...
...
180
179
181
    // SORT_SECTION
180
    // SORT_SECTION
182
    FEnableSort: Boolean;
181
    FEnableSort: Boolean;
183
    FInputFolder: string;
182
    FImportDir: string;
184
183
185
    FFB2FolderTemplate: string;
184
    FFB2FolderTemplate: string;
186
    FFB2FileTemplate: string;
185
    FFB2FileTemplate: string;
...
...
226
225
227
    function GetInitialDir(const key: string): string;
226
    function GetInitialDir(const key: string): string;
228
    procedure SetInitialDir(const key, Value: string);
227
    procedure SetInitialDir(const key, Value: string);
228
229
    function GetPresetPath: string;
229
    function GetPresetPath: string;
230
231
    procedure SetUpdateDir(const Value: string);
230
    function GetUpdatePath: string;
232
    function GetUpdatePath: string;
231
233
234
    procedure SetImportDir(const Value: string);
235
    function GetImportPath: string;
236
232
  public
237
  public
233
    constructor Create;
238
    constructor Create;
234
    destructor Destroy; override;
239
    destructor Destroy; override;
...
...
238
243
239
  public
244
  public
240
    property AppPath: string read FAppPath;
245
    property AppPath: string read FAppPath;
246
241
    property DataDir: string read FDataDir;
247
    property DataDir: string read FDataDir;
242
    property DataPath: string read GetDataPath;
248
    property DataPath: string read GetDataPath;
249
243
    property TempDir: string read FTempDir write FTempDir;
250
    property TempDir: string read FTempDir write FTempDir;
244
    property TempPath: string read GetTempPath;
251
    property TempPath: string read GetTempPath;
252
245
    property WorkDir: string read FWorkDir;
253
    property WorkDir: string read FWorkDir;
246
    property WorkPath: string read GetWorkPath;
254
    property WorkPath: string read GetWorkPath;
247
    property PresetDir: string read FPresetDir write FPresetDir;
255
256
    property PresetDir: string read FPresetDir;
248
    property PresetPath: string read GetPresetPath;
257
    property PresetPath: string read GetPresetPath;
249
    property UpdateDir: string read FUpdateDir write FUpdateDir;
258
259
    property UpdateDir: string read FUpdateDir write SetUpdateDir;
250
    property UpdatePath: string read GetUpdatePath;
260
    property UpdatePath: string read GetUpdatePath;
251
    //
261
    //
252
    // Полные пути к некоторым файлам
262
    // Полные пути к некоторым файлам
...
...
256
    //
266
    //
257
    // Собственно настройки программы
267
    // Собственно настройки программы
258
    //
268
    //
259
    property UseSystemTemp: Boolean read FUseSystemTemp write FUseSystemTemp;
260
261
    property DeviceDir: string read FDeviceDir write SetDeviceDir;
269
    property DeviceDir: string read FDeviceDir write SetDeviceDir;
262
    property DevicePath: string read GetDevicePath;
270
    property DevicePath: string read GetDevicePath;
271
263
    property ReadDir: string read FReadDir write SetReadDir;
272
    property ReadDir: string read FReadDir write SetReadDir;
264
    property ReadPath: string read GetReadPath;
273
    property ReadPath: string read GetReadPath;
265
274
266
    property TransliterateFileName: Boolean read FTransliterate write FTransliterate;
275
    // TODO : REMOVE property TransliterateFileName: Boolean read FTransliterate write FTransliterate;
267
    property ActiveCollection: Integer read FActiveCollection write FActiveCollection;
276
    property ActiveCollection: Integer read FActiveCollection write FActiveCollection;
268
    property CheckUpdate: Boolean read FDoCheckUpdate write FDoCheckUpdate;
277
    property CheckUpdate: Boolean read FDoCheckUpdate write FDoCheckUpdate;
269
    property CheckExternalLibUpdate: Boolean read FCheckExternalLibUpdate write FCheckExternalLibUpdate;
278
    property CheckExternalLibUpdate: Boolean read FCheckExternalLibUpdate write FCheckExternalLibUpdate;
...
...
367
376
368
    // SORT_SECTION
377
    // SORT_SECTION
369
    property EnableSort: Boolean read FEnableSort write FEnableSort;
378
    property EnableSort: Boolean read FEnableSort write FEnableSort;
370
    property InputFolder: string read FInputFolder write FInputFolder;
379
    property ImportDir: string read FImportDir write SetImportDir;
380
    property ImportPath: string read GetImportPath;
371
381
372
    property FB2FolderTemplate: string read FFB2FolderTemplate write FFB2FolderTemplate;
382
    property FB2FolderTemplate: string read FFB2FolderTemplate write FFB2FolderTemplate;
373
    property FB2FileTemplate: string read FFB2FileTemplate write FFB2FileTemplate;
383
    property FB2FileTemplate: string read FFB2FileTemplate write FFB2FileTemplate;
...
...
452
  STR_USERDBS = 'user';
462
  STR_USERDBS = 'user';
453
463
454
var
464
var
455
  AppDataPath: string;
465
  GlobalAppDataDir: string;
456
466
457
  UseLocalData, UseLocalTemp, UserDatabase: Boolean;
467
  UseLocalData, UseLocalTemp, UserDatabase: Boolean;
458
  I: Integer;
468
  I: Integer;
...
...
462
begin
472
begin
463
  inherited Create;
473
  inherited Create;
464
474
465
  UseLocalData := False;
466
  UseLocalTemp := False;
467
  UserDatabase := False;
468
469
  FAppPath := ExtractFilePath(Application.ExeName);
475
  FAppPath := ExtractFilePath(Application.ExeName);
470
  AppDataPath := GetSpecialPath(CSIDL_APPDATA) + APPDATA_DIR_NAME;
476
  GlobalAppDataDir := GetSpecialPath(CSIDL_APPDATA) + APPDATA_DIR_NAME;
471
477
472
  // определяем рабочую и временную папку в зависимости от параметров
478
  // определяем рабочую и временную папку в зависимости от параметров
473
  // командной строки или ключевых файлов
  FDbsFileName := SYSTEM_DATABASE_FILENAME;
479
  // командной строки или ключевых файлов
  FDbsFileName := SYSTEM_DATABASE_FILENAME;
474
  FIniFileName := SETTINGS_FILE_NAME;
480
  FIniFileName := SETTINGS_FILE_NAME;
475
481
482
  UseLocalData := False;
483
  UseLocalTemp := False;
484
  UserDatabase := False;
485
476
  for I := 1 to ParamCount do
486
  for I := 1 to ParamCount do
477
  begin
487
  begin
478
    if not UseLocalData then
488
    if not UseLocalData then
479
      UseLocalData := (LowerCase(ParamStr(I)) = STR_USELOCALDATA);
489
      UseLocalData := (LowerCase(ParamStr(I)) = STR_USELOCALDATA);
490
480
    if not UseLocalTemp then
491
    if not UseLocalTemp then
481
      UseLocalTemp := (LowerCase(paramstr(I)) = STR_USELOCALTEMP);
492
      UseLocalTemp := (LowerCase(ParamStr(I)) = STR_USELOCALTEMP);
493
482
    if (LowerCase(ParamStr(I)) = STR_USERDBS) and (ParamStr(I + 1) <> '') then
494
    if (LowerCase(ParamStr(I)) = STR_USERDBS) and (ParamStr(I + 1) <> '') then
483
    begin
495
    begin
484
      DBFileName := ParamStr(I + 1);
496
      DBFileName := ParamStr(I + 1);
...
...
487
    end;
499
    end;
488
  end;
500
  end;
489
501
490
  UseLocalData := UseLocalData or FileExists(FAppPath + STR_USELOCALDATA) or not DirectoryExists(AppDataPath);
502
  UseLocalData := UseLocalData or FileExists(FAppPath + STR_USELOCALDATA) or not DirectoryExists(GlobalAppDataDir);
491
  UseLocalTemp := UseLocalTemp or FileExists(FAppPath + STR_USELOCALTEMP);
503
  UseLocalTemp := UseLocalTemp or FileExists(FAppPath + STR_USELOCALTEMP);
492
504
493
  // Устанавливаем рабочую папку
505
  //
506
  // Устанавливаем рабочую папку и папку с данными
  //
507
  FWorkDir := IfThen(UseLocalData, ExcludeTrailingPathDelimiter(FAppPath), GlobalAppDataDir);
508
  FDataDir := WorkPath + DATA_DIR_NAME;
494
509
495
  if not UseLocalData then
496
  begin // работаем с AppData
497
    FWorkDir := AppDataPath;
498
    FDataDir := WorkPath + DATA_DIR_NAME;
499
  end
500
  else
501
  begin
502
    FWorkDir := FAppPath; // работаем с AppPath
503
    FDataDir := FAppPath + DATA_DIR_NAME;
504
  end;
505
506
  if UserDatabase then // пользовательский файл БД и настроек
510
  if UserDatabase then // пользовательский файл БД и настроек
507
  begin
511
  begin
508
    FDbsFileName := DBFileName + '.dbs';
512
    FDbsFileName := DBFileName + '.dbs';
509
    FIniFileName := DBFileName + '.ini';
513
    FIniFileName := DBFileName + '.ini';
510
    if FileExists(WorkPath + SETTINGS_FILE_NAME) and not FileExists(WorkPath + FIniFileName) then
514
    if FileExists(WorkPath + SETTINGS_FILE_NAME) and not FileExists(WorkPath + FIniFileName) then
515
    begin
511
      // если такого файла еще нет, копируем стандартный
516
      // если такого файла еще нет, копируем стандартный
512
      unit_globals.CopyFile(WorkPath + SETTINGS_FILE_NAME, WorkPath + FIniFileName);
517
      unit_globals.CopyFile(WorkPath + SETTINGS_FILE_NAME, WorkPath + FIniFileName);
513
      // может лучше использовать Windows.CopyFile(PChar(WorkPath + SETTINGS_FILE_NAME), PChar(WorkPath + FIniFileName), False);
518
      // может лучше использовать Windows.CopyFile(PChar(WorkPath + SETTINGS_FILE_NAME), PChar(WorkPath + FIniFileName), False);
519
    end;
514
  end;
520
  end;
515
521
522
  //
516
  // устанавливаем временную папку
523
  // устанавливаем временную папку
517
524
  //
518
  if not UseLocalTemp then
525
  if UseLocalTemp then
519
    FTempDir := TPath.Combine(TPath.GetTempPath, '_myhomelib')
526
    FTempDir := FAppPath + TEMP_DIR_NAME
520
  else
527
  else
521
    FTempDir := FAppPath + TEMP_DIR_NAME;
528
    FTempDir := TPath.Combine(TPath.GetTempPath, '_myhomelib');
522
529
530
  //
531
  // устанавливаем путь для хранения пресетов
  //
523
  FPresetDir := WorkPath + PRESET_DIR_NAME;
532
  FPresetDir := WorkPath + PRESET_DIR_NAME;
533
524
  // -----------------------------------------------------
534
  // -----------------------------------------------------
525
526
  FReaders := TReaders.Create;
535
  FReaders := TReaders.Create;
527
  FScripts := TScripts.Create;
536
  FScripts := TScripts.Create;
528
  FUpdateList := TUpdateInfoList.Create;
537
  FUpdateList := TUpdateInfoList.Create;
...
...
628
  FreeMem(proxyInfo);
639
  FreeMem(proxyInfo);
629
end;
640
end;
630
641
642
function SafeGetDirName(const Value: string): string;
643
begin
644
  if (Value = '') or (TPath.GetPathRoot(Value) = Value) then
645
    Result := Value
646
  else
647
    Result := ExcludeTrailingPathDelimiter(Value);
648
end;
649
650
function SafeGetPath(const Value: string): string;
651
begin
652
  if Value = '' then
653
    Result := Value
654
  else
655
    Result := IncludeTrailingPathDelimiter(Value);
656
end;
657
631
procedure TMHLSettings.LoadSettings;
658
procedure TMHLSettings.LoadSettings;
632
var
659
var
633
  iniFile: TIniFile;
660
  iniFile: TIniFile;
...
...
637
    //
664
    //
638
    // PATH_SECTION
665
    // PATH_SECTION
639
    //
666
    //
640
    FDeviceDir := ExcludeTrailingPathDelimiter(iniFile.ReadString(PATH_SECTION, 'Device', 'C:\'));
667
    DeviceDir := iniFile.ReadString(PATH_SECTION, 'Device', '');
641
    FReadDir := ExcludeTrailingPathDelimiter(iniFile.ReadString(PATH_SECTION, 'Read', ''));
668
    ReadDir := iniFile.ReadString(PATH_SECTION, 'Read', '');
642
    FUpdateDir := ExcludeTrailingPathDelimiter(iniFile.ReadString(PATH_SECTION, 'Update', ''));
669
    UpdateDir := iniFile.ReadString(PATH_SECTION, 'Update', '');
643
670
644
    if not DirectoryExists(FReadDir) then
645
      FReadDir := FTempDir;
646
647
    if FUpdateDir = '' then
648
      FUpdateDir := FWorkDir;
649
650
    //
671
    //
651
    // SYSTEM_SECTION
672
    // SYSTEM_SECTION
652
    //
673
    //
653
    FTransliterate := iniFile.ReadBool(SYSTEM_SECTION, 'TransliterateFileName', True);
674
    // TODO : REMOVE FTransliterate := iniFile.ReadBool(SYSTEM_SECTION, 'TransliterateFileName', True);
654
    FActiveCollection := iniFile.ReadInteger(SYSTEM_SECTION, 'ActiveCollection', 1);
675
    FActiveCollection := iniFile.ReadInteger(SYSTEM_SECTION, 'ActiveCollection', 1);
655
    FDoCheckUpdate := iniFile.ReadBool(SYSTEM_SECTION, 'CheckUpdates', True);
676
    FDoCheckUpdate := iniFile.ReadBool(SYSTEM_SECTION, 'CheckUpdates', True);
656
    FCheckExternalLibUpdate := iniFile.ReadBool(SYSTEM_SECTION, 'CheckLibrusecUpdates', True);
677
    FCheckExternalLibUpdate := iniFile.ReadBool(SYSTEM_SECTION, 'CheckLibrusecUpdates', True);
657
    FPromptDevicePath := iniFile.ReadBool(SYSTEM_SECTION, 'PromptDevicePath', False);
678
    FPromptDevicePath := iniFile.ReadBool(SYSTEM_SECTION, 'PromptDevicePath', True);
658
    FFolderTemplate := iniFile.ReadString(SYSTEM_SECTION, 'FolderTemplate', '%f\%s');
679
    FFolderTemplate := iniFile.ReadString(SYSTEM_SECTION, 'FolderTemplate', '%f\%s');
659
    FFileNameTemplate := iniFile.ReadString(SYSTEM_SECTION, 'FileNameTemplate', '%n - %t');
680
    FFileNameTemplate := iniFile.ReadString(SYSTEM_SECTION, 'FileNameTemplate', '%n - %t');
660
    FRemoveSquareBrackets := iniFile.ReadBool(SYSTEM_SECTION, 'RemoveSquareBrackets', True);
681
    FRemoveSquareBrackets := iniFile.ReadBool(SYSTEM_SECTION, 'RemoveSquareBrackets', True);
661
    FUseSystemTemp := iniFile.ReadBool(SYSTEM_SECTION, 'UseSystemTemp', False);
662
682
663
    case iniFile.ReadInteger(SYSTEM_SECTION, 'ExpFormat', 0) of
683
    case iniFile.ReadInteger(SYSTEM_SECTION, 'ExpFormat', 0) of
664
      0: FExportMode := emFB2;
684
      0: FExportMode := emFB2;
...
...
726
    FLibUsername := iniFile.ReadString(NETWORK_SECTION, 'lib-user', '');
746
    FLibUsername := iniFile.ReadString(NETWORK_SECTION, 'lib-user', '');
727
    FLibPassword := DecodePassString(iniFile.ReadString(NETWORK_SECTION, 'lib-pass', ''));
747
    FLibPassword := DecodePassString(iniFile.ReadString(NETWORK_SECTION, 'lib-pass', ''));
728
748
729
    FUseIESettings := iniFile.ReadBool(NETWORK_SECTION, 'use_ie_settings', False);
749
    FUseIESettings := iniFile.ReadBool(NETWORK_SECTION, 'use_ie_settings', True);
730
    if FUseIESettings then
750
    if FUseIESettings then
731
      GetIEProxySettings(FIEProxyServer, FIEProxyPort);
751
      GetIEProxySettings(FIEProxyServer, FIEProxyPort);
732
752
...
...
793
    //
813
    //
794
814
795
    FEnableSort := iniFile.ReadBool(FILE_SORT_SECTION, 'EnableFileSort', False);
815
    FEnableSort := iniFile.ReadBool(FILE_SORT_SECTION, 'EnableFileSort', False);
796
    FInputFolder := iniFile.ReadString(FILE_SORT_SECTION, 'InputFolder', '');
816
    FImportDir := iniFile.ReadString(FILE_SORT_SECTION, 'InputFolder', '');
797
817
798
    FFB2FolderTemplate := iniFile.ReadString(FILE_SORT_SECTION, 'Fb2FolderTemplate', '');
818
    FFB2FolderTemplate := iniFile.ReadString(FILE_SORT_SECTION, 'Fb2FolderTemplate', '');
799
    FFB2FileTemplate := iniFile.ReadString(FILE_SORT_SECTION, 'Fb2FileTemplate', '');
819
    FFB2FileTemplate := iniFile.ReadString(FILE_SORT_SECTION, 'Fb2FileTemplate', '');
...
...
829
    //
849
    //
830
    // SYSTEM_SECTION
850
    // SYSTEM_SECTION
831
    //
851
    //
832
    iniFile.WriteBool(SYSTEM_SECTION, 'TransliterateFileName', FTransliterate);
852
    // TODO : REMOVE iniFile.WriteBool(SYSTEM_SECTION, 'TransliterateFileName', FTransliterate);
833
    iniFile.WriteInteger(SYSTEM_SECTION, 'ActiveCollection', FActiveCollection);
853
    iniFile.WriteInteger(SYSTEM_SECTION, 'ActiveCollection', FActiveCollection);
834
    iniFile.WriteBool(SYSTEM_SECTION, 'CheckUpdates', FDoCheckUpdate);
854
    iniFile.WriteBool(SYSTEM_SECTION, 'CheckUpdates', FDoCheckUpdate);
835
    iniFile.WriteBool(SYSTEM_SECTION, 'CheckLibrusecUpdates', FCheckExternalLibUpdate);
855
    iniFile.WriteBool(SYSTEM_SECTION, 'CheckLibrusecUpdates', FCheckExternalLibUpdate);
...
...
923
    //
943
    //
924
    iniFile.WriteBool(IMPORT_SECTION, 'CheckFB2Exist', FCheckExistsFiles);
944
    iniFile.WriteBool(IMPORT_SECTION, 'CheckFB2Exist', FCheckExistsFiles);
925
945
926
927
    //
946
    //
928
    // BEHAVIOR_SECTION
947
    // BEHAVIOR_SECTION
929
    //
948
    //
930
931
    iniFile.WriteBool(BEHAVIOR_SECTION, 'ShowRusABC', FShowRusBar);
949
    iniFile.WriteBool(BEHAVIOR_SECTION, 'ShowRusABC', FShowRusBar);
932
    iniFile.WriteBool(BEHAVIOR_SECTION, 'ShowEngABC', FShowEngBar);
950
    iniFile.WriteBool(BEHAVIOR_SECTION, 'ShowEngABC', FShowEngBar);
933
    iniFile.WriteBool(BEHAVIOR_SECTION, 'DoNotShowDeleted', FDoNotShowDeleted);
951
    iniFile.WriteBool(BEHAVIOR_SECTION, 'DoNotShowDeleted', FDoNotShowDeleted);
...
...
948
    iniFile.WriteBool(BEHAVIOR_SECTION, 'ForceConvertToFBD', FForceConvertToFBD);
966
    iniFile.WriteBool(BEHAVIOR_SECTION, 'ForceConvertToFBD', FForceConvertToFBD);
949
    iniFile.WriteBool(BEHAVIOR_SECTION, 'OverwriteFB2Info', FOverwriteFB2Info);
967
    iniFile.WriteBool(BEHAVIOR_SECTION, 'OverwriteFB2Info', FOverwriteFB2Info);
950
    iniFile.WriteString(BEHAVIOR_SECTION, 'BookHeaderTemplate', FFBDBookHeaderTemplate);
968
    iniFile.WriteString(BEHAVIOR_SECTION, 'BookHeaderTemplate', FFBDBookHeaderTemplate);
969
951
    //
970
    //
952
    // FILE_SORT_SECTION
971
    // FILE_SORT_SECTION
953
    //
972
    //
954
955
    iniFile.WriteBool(FILE_SORT_SECTION, 'EnableFileSort', FEnableSort);
973
    iniFile.WriteBool(FILE_SORT_SECTION, 'EnableFileSort', FEnableSort);
956
    iniFile.WriteString(FILE_SORT_SECTION, 'InputFolder', FInputFolder);
974
    iniFile.WriteString(FILE_SORT_SECTION, 'InputFolder', FImportDir);
957
975
958
    iniFile.WriteString(FILE_SORT_SECTION, 'Fb2FolderTemplate', FFB2FolderTemplate);
976
    iniFile.WriteString(FILE_SORT_SECTION, 'Fb2FolderTemplate', FFB2FolderTemplate);
959
    iniFile.WriteString(FILE_SORT_SECTION, 'Fb2FileTemplate', FFB2FileTemplate);
977
    iniFile.WriteString(FILE_SORT_SECTION, 'Fb2FileTemplate', FFB2FileTemplate);
...
...
1209
1227
1210
function TMHLSettings.GetDataPath: string;
1228
function TMHLSettings.GetDataPath: string;
1211
begin
1229
begin
1230
  Assert(FDataDir <> '');
1212
  Result := IncludeTrailingPathDelimiter(FDataDir);
1231
  Result := IncludeTrailingPathDelimiter(FDataDir);
1213
end;
1232
end;
1214
1233
1215
function TMHLSettings.GetTempPath: string;
1234
function TMHLSettings.GetTempPath: string;
1216
begin
1235
begin
1236
  Assert(FTempDir <> '');
1217
  Result := IncludeTrailingPathDelimiter(FTempDir);
1237
  Result := IncludeTrailingPathDelimiter(FTempDir);
1218
end;
1238
end;
1219
1239
1240
procedure TMHLSettings.SetUpdateDir(const Value: string);
1241
begin
1242
  FUpdateDir := SafeGetDirName(Value);
1243
end;
1244
1220
function TMHLSettings.GetUpdatePath: string;
1245
function TMHLSettings.GetUpdatePath: string;
1221
begin
1246
begin
1222
  Result := IncludeTrailingPathDelimiter(FUpdateDir);
1247
  //
1248
  // провериться на пустоту и существование. Вернуть папку по умолчанию в случае надобности
  //
1249
  if (FUpdateDir = '') or not TDirectory.Exists(FUpdateDir) then
1250
    Result := WorkPath
1251
  else
1252
    Result := IncludeTrailingPathDelimiter(FUpdateDir);
1223
end;
1253
end;
1224
1254
1255
procedure TMHLSettings.SetImportDir(const Value: string);
1256
begin
1257
  FImportDir := SafeGetDirName(Value);
1258
end;
1259
1260
function TMHLSettings.GetImportPath: string;
1261
begin
1262
  Assert(FImportDir <> '');
1263
  Result := SafeGetPath(FImportDir);
1264
end;
1265
1225
function TMHLSettings.GetWorkPath: string;
1266
function TMHLSettings.GetWorkPath: string;
1226
begin
1267
begin
1268
  Assert(FWorkDir <> '');
1227
  Result := IncludeTrailingPathDelimiter(FWorkDir);
1269
  Result := IncludeTrailingPathDelimiter(FWorkDir);
1228
end;
1270
end;
1229
1271
1230
function TMHLSettings.GetDevicePath: string;
1272
function TMHLSettings.GetDevicePath: string;
1231
begin
1273
begin
1274
  Assert(FDeviceDir <> '');
1232
  Result := IncludeTrailingPathDelimiter(FDeviceDir);
1275
  Result := IncludeTrailingPathDelimiter(FDeviceDir);
1233
end;
1276
end;
1234
1277
1278
procedure TMHLSettings.SetDeviceDir(const Value: string);
1279
begin
1280
  FDeviceDir := SafeGetDirName(Value);
1281
end;
1282
1235
function TMHLSettings.GetSystemFileName(fileType: TMHLSystemFile): string;
1283
function TMHLSettings.GetSystemFileName(fileType: TMHLSystemFile): string;
1236
begin
1284
begin
1237
  case fileType of
1285
  case fileType of
...
...
1254
  end;
1303
  end;
1255
end;
1304
end;
1256
1305
1257
procedure TMHLSettings.SetDeviceDir(const Value: string);
1258
begin
1259
  FDeviceDir := ExcludeTrailingPathDelimiter(Value);
1260
end;
1261
1262
procedure TMHLSettings.LoadInitialDirs(iniFile: TIniFile);
1306
procedure TMHLSettings.LoadInitialDirs(iniFile: TIniFile);
1263
var
1307
var
1264
  I: Integer;
1308
  I: Integer;
...
...
1289
  Result := FInitialDirs.Values[key];
1333
  Result := FInitialDirs.Values[key];
1290
end;
1334
end;
1291
1335
1336
procedure TMHLSettings.SetInitialDir(const key, Value: string);
1337
begin
1338
  FInitialDirs.Values[key] := Value;
1339
end;
1340
1292
function TMHLSettings.GetPresetPath: string;
1341
function TMHLSettings.GetPresetPath: string;
1293
begin
1342
begin
1294
  if FPresetDir <> '' then
1343
  Assert(FPresetDir <> '');
1295
    Result := IncludeTrailingPathDelimiter(FPresetDir)
1344
  Result := SafeGetPath(FPresetDir);
1296
  else
1297
    Result := '';
1298
end;
1345
end;
1299
1346
1300
function TMHLSettings.GetReadPath: string;
1347
function TMHLSettings.GetReadPath: string;
1301
begin
1348
begin
1302
  if FReadDir <> '' then
1349
  if (FReadDir = '') or not TDirectory.Exists(FReadDir) then
1303
    Result := IncludeTrailingPathDelimiter(FReadDir)
1350
    Result := TempPath
1304
  else
1351
  else
1305
    Result := '';
1352
    Result := SafeGetPath(FReadDir);
1306
end;
1353
end;
1307
1354
1308
procedure TMHLSettings.SetInitialDir(const key, Value: string);
1309
begin
1310
  FInitialDirs.Values[key] := Value;
1311
end;
1312
1313
procedure TMHLSettings.SetReadDir(const Value: string);
1355
procedure TMHLSettings.SetReadDir(const Value: string);
1314
begin
1356
begin
1315
  FReadDir := ExcludeTrailingPathDelimiter(Value)
1357
  FReadDir := SafeGetDirName(Value);
1316
end;
1358
end;
1317
1359
1318
initialization
1360
initialization