umain.pas 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. unit uMain;
  2. {$mode delphi}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  6. Quick.Config,
  7. //Quick.Config.Provider.Registry,
  8. Generics.Collections,
  9. Quick.Config.Provider.Json;
  10. type
  11. TMyPriority = (msLow, msMed, msHigh);
  12. TWinPos = record
  13. PosX : Integer;
  14. PosY : Integer;
  15. end;
  16. TProcessType = record
  17. Id : Integer;
  18. Priority : TMyPriority;
  19. Redundant : Boolean;
  20. end;
  21. TWorker = class
  22. Name : string;
  23. Active : Boolean;
  24. end;
  25. {$M+} TMyConfig2 = class(TAppConfig)
  26. private
  27. fhola : Integer;
  28. published
  29. property hola : Integer read fhola write fhola;
  30. end;
  31. {$M+} TMyConfig = class(TAppConfig)
  32. private
  33. fTitle : string;
  34. fHidden : Boolean;
  35. fSessionName: string;
  36. public
  37. Sizes : array of Integer;
  38. LastFilename : string;
  39. WindowPos : TWinPos;
  40. History : array of TProcessType;
  41. Complex : TProcessType;
  42. ModifyDate : TDateTime;
  43. WorkList : TObjectList<TWorker>;
  44. constructor Create; override;
  45. destructor Destroy; override;
  46. procedure DefaultValues;
  47. property Title : string read fTitle write fTitle;
  48. property SessionName : string read fSessionName write fSessionName;
  49. end;
  50. { TForm1 }
  51. TForm1 = class(TForm)
  52. btnSaveJson: TButton;
  53. btnLoadJson: TButton;
  54. meInfo: TMemo;
  55. procedure btnLoadJsonClick(Sender: TObject);
  56. procedure btnSaveJsonClick(Sender: TObject);
  57. procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
  58. procedure FormCreate(Sender: TObject);
  59. private
  60. public
  61. procedure SetConfig(cConfig: TMyConfig);
  62. function TestConfig(cConfig1, cConfig2 : TMyConfig) : Boolean;
  63. end;
  64. var
  65. Form1: TForm1;
  66. ConfigJson : TMyConfig;
  67. ConfigJson2 : TMyConfig2;
  68. ConfigReg : TMyConfig;
  69. ConfigTest : TMyConfig;
  70. AppConfigJson : TAppConfigJsonProvider<TMyConfig2>;
  71. //AppConfigReg : TAppConfigRegistryProvider<TMyConfig>;
  72. implementation
  73. {$R *.lfm}
  74. { TForm1 }
  75. procedure TForm1.btnSaveJsonClick(Sender: TObject);
  76. begin
  77. SetConfig(ConfigJson);
  78. AppConfigJson.Save(ConfigJson2);
  79. meInfo.Lines.Add('Saved Config in Json at ' + DateTimeToStr(ConfigJson.LastSaved));
  80. end;
  81. procedure TForm1.btnLoadJsonClick(Sender: TObject);
  82. begin
  83. meInfo.Lines.Add('Load ConfigJson');
  84. AppConfigJson.Load(ConfigJson2);
  85. meInfo.Lines.Add(ConfigJson.ToJSON);
  86. if TestConfig(ConfigTest,ConfigJson) then meInfo.Lines.Add('Test passed successfully!');
  87. end;
  88. function TForm1.TestConfig(cConfig1, cConfig2 : TMyConfig) : Boolean;
  89. var
  90. i : Integer;
  91. begin
  92. try
  93. Assert(cConfig1.LastFilename = cConfig2.LastFilename);
  94. for i := Low(cConfig1.Sizes) to High(cConfig1.Sizes) do
  95. Assert(cConfig1.Sizes[i] = cConfig2.Sizes[i]);
  96. Assert(cConfig1.WindowPos.PosX = cConfig2.WindowPos.PosX);
  97. Assert(cConfig1.WindowPos.PosX = cConfig2.WindowPos.PosX);
  98. Assert(cConfig1.Complex.Priority = cConfig2.Complex.Priority);
  99. Assert(cConfig1.Complex.Redundant = cConfig2.Complex.Redundant);
  100. Assert(cConfig1.Title = cConfig2.Title);
  101. for i := 0 to cConfig1.WorkList.Count - 1 do
  102. begin
  103. Assert(cConfig1.WorkList[i].Name = cConfig2.WorkList[i].Name);
  104. Assert(cConfig1.WorkList[i].Active = cConfig2.WorkList[i].Active);
  105. end;
  106. for i := 0 to High(cConfig1.History) do
  107. begin
  108. Assert(cConfig1.History[i].Priority = cConfig2.History[i].Priority);
  109. Assert(cConfig1.History[i].Redundant = cConfig2.History[i].Redundant);
  110. end;
  111. Result := True;
  112. except
  113. ShowMessage('Configuration not has been saved previously or has a corruption problem');
  114. end;
  115. end;
  116. procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
  117. begin
  118. if Assigned(AppConfigJson) then AppConfigJson.Free;
  119. //if Assigned(AppConfigReg) then AppConfigReg.Free;
  120. if Assigned(ConfigTest) then ConfigTest.Free;
  121. if Assigned(ConfigReg) then ConfigReg.Free;
  122. if Assigned(ConfigJson) then ConfigJson.Free;
  123. end;
  124. procedure TForm1.FormCreate(Sender: TObject);
  125. begin
  126. ConfigTest := TMyConfig.Create;
  127. SetConfig(ConfigTest);
  128. AppConfigJson := TAppConfigJsonProvider<TMyConfig2>.Create(ConfigJson2);
  129. AppConfigJson.CreateIfNotExists := True;
  130. AppConfigJson.Filename := 'Config.json';
  131. //AppConfigReg := TAppConfigRegistryProvider<TMyConfig>.Create(ConfigReg);
  132. //AppConfigReg.HRoot := HKEY_CURRENT_USER;
  133. //AppConfigReg.MainKey := '_AppConfig';
  134. end;
  135. procedure TForm1.SetConfig(cConfig: TMyConfig);
  136. begin
  137. end;
  138. { TMyConfig }
  139. constructor TMyConfig.Create;
  140. begin
  141. inherited;
  142. WorkList := TObjectList<TWorker>.Create(True);
  143. DefaultValues;
  144. end;
  145. procedure TMyConfig.DefaultValues;
  146. begin
  147. fTitle := 'Default value';
  148. end;
  149. destructor TMyConfig.Destroy;
  150. begin
  151. if Assigned(WorkList) then WorkList.Free;
  152. inherited;
  153. end;
  154. end.