ec_setswitches.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. unit ec_setswitches;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons,
  6. StdCtrls, EditBtn, Spin, ec_base;
  7. type
  8. { TECSetSwitchesFrame }
  9. TECSetSwitchesFrame = class(TECBaseFrame)
  10. NewValueGroupBox: TGroupBox;
  11. OnRadioButton: TRadioButton;
  12. OffRadioButton: TRadioButton;
  13. SingleSwitchEditButton: TEditButton;
  14. SwitchToSetGroupBox: TGroupBox;
  15. SwitchRangeToLabel: TLabel;
  16. SwitchRangeFromSpinEdit: TSpinEdit;
  17. SwitchRangeFromLabel: TLabel;
  18. SingleSwitchRadioButton: TRadioButton;
  19. SwitchRangeToSpinEdit: TSpinEdit;
  20. SwitchRangeRadioButton: TRadioButton;
  21. procedure SingleSwitchEditButtonButtonClick(Sender: TObject);
  22. procedure SingleSwitchEditButtonKeyPress(Sender: TObject; var Key: char);
  23. procedure SwitchRadioButtonChange(Sender: TObject);
  24. private
  25. SingleSwitchId: Integer;
  26. procedure ToggleEnabledState;
  27. procedure UpdateSingleSwitchName;
  28. public
  29. procedure InitNew; override;
  30. procedure InitExisting; override;
  31. procedure MakeResultingCommand; override;
  32. end;
  33. var
  34. ECSetSwitchesFrame: TECSetSwitchesFrame;
  35. implementation
  36. {$R *.lfm}
  37. uses
  38. namedindexselection, database, fpjson, constants;
  39. { TECSetSwitchesFrame }
  40. procedure TECSetSwitchesFrame.SwitchRadioButtonChange(Sender: TObject);
  41. begin
  42. ToggleEnabledState
  43. end;
  44. procedure TECSetSwitchesFrame.SingleSwitchEditButtonButtonClick(Sender: TObject);
  45. begin
  46. SingleSwitchId := NamedIndexSelectionForm.SelectSwitch(SingleSwitchId, Db);
  47. UpdateSingleSwitchName
  48. end;
  49. procedure TECSetSwitchesFrame.SingleSwitchEditButtonKeyPress(Sender: TObject;
  50. var Key: char);
  51. begin
  52. Key := #0;
  53. SingleSwitchEditButtonButtonClick(Sender);
  54. end;
  55. procedure TECSetSwitchesFrame.ToggleEnabledState;
  56. begin
  57. SingleSwitchEditButton.Enabled := SingleSwitchRadioButton.Checked;
  58. SwitchRangeFromSpinEdit.Enabled := SwitchRangeRadioButton.Checked;
  59. SwitchRangeToSpinEdit.Enabled := SwitchRangeRadioButton.Checked;
  60. end;
  61. procedure TECSetSwitchesFrame.UpdateSingleSwitchName;
  62. begin
  63. SingleSwitchEditButton.Text := Db.GetSwitchName(SingleSwitchId);
  64. end;
  65. procedure TECSetSwitchesFrame.InitNew;
  66. begin
  67. SingleSwitchId := 1;
  68. UpdateSingleSwitchName;
  69. ToggleEnabledState
  70. end;
  71. procedure TECSetSwitchesFrame.InitExisting;
  72. var
  73. Params: TJSONArray;
  74. StartId: Integer = 1;
  75. EndId: Integer = 1;
  76. IsOff: Boolean = False;
  77. begin
  78. Params := GetFirstParams;
  79. if (Params.Count >= 1) and (Params[0].JSONType = jtNumber) then
  80. StartId := Params.Integers[0];
  81. if (Params.Count >= 2) and (Params[1].JSONType = jtNumber) then
  82. EndId := Params.Integers[1];
  83. if (Params.Count >= 3) and (Params[2].JSONType = jtBoolean) then
  84. IsOff := Params.Booleans[2];
  85. SingleSwitchId := StartId;
  86. UpdateSingleSwitchName;
  87. SwitchRangeFromSpinEdit.Value := StartId;
  88. SwitchRangeToSpinEdit.Value := EndId;
  89. if StartId = EndId then begin
  90. SwitchRangeRadioButton.Checked := False;
  91. SingleSwitchRadioButton.Checked := True;
  92. end else begin
  93. SingleSwitchRadioButton.Checked := False;
  94. SwitchRangeRadioButton.Checked := True;
  95. end;
  96. ToggleEnabledState;
  97. if IsOff then begin
  98. OnRadioButton.Checked := False;
  99. OffRadioButton.Checked := True
  100. end else begin
  101. OnRadioButton.Checked := False;
  102. OnRadioButton.Checked := True
  103. end;
  104. end;
  105. procedure TECSetSwitchesFrame.MakeResultingCommand;
  106. var
  107. StartId, EndId: Integer;
  108. begin
  109. if SingleSwitchRadioButton.Checked then begin
  110. StartId := SingleSwitchId;
  111. EndId := SingleSwitchId;
  112. end else begin
  113. StartId := SwitchRangeFromSpinEdit.Value;
  114. EndId := SwitchRangeToSpinEdit.Value;
  115. end;
  116. ResultingCommand := TJSONArray.Create([
  117. TJSONObject.Create([
  118. 'code', SET_SWITCHES_EC_CODE,
  119. 'indent', Indent,
  120. 'parameters', TJSONArray.Create([
  121. StartId,
  122. EndId,
  123. OffRadioButton.Checked
  124. ])
  125. ])
  126. ]);
  127. end;
  128. end.