ColVisibleManager.pas 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. unit ColVisibleManager;
  2. interface
  3. uses
  4. Classes, sdGridDBA, ZhAPI;
  5. type
  6. TColVisible = class
  7. private
  8. FCustom: Boolean;
  9. // Defualt CaptionAcrossCols
  10. FDefaultCAC: Integer;
  11. FDBACol: TsdGridColumn;
  12. public
  13. constructor Create(ACol: TsdGridColumn); virtual;
  14. procedure RefreshVisible; virtual;
  15. property DBACol: TsdGridColumn read FDBACol;
  16. property DefaultCAC: Integer read FDefaultCAC;
  17. property Custom: Boolean read FCustom write FCustom;
  18. end;
  19. TBM_ColVisible = class(TColVisible)
  20. private
  21. FPriceChange: Boolean;
  22. FBGLCode: Boolean;
  23. FAlias: Boolean;
  24. FDesign: Boolean;
  25. public
  26. constructor Create(ACol: TsdGridColumn); override;
  27. procedure RefreshVisible; override;
  28. property PriceChange: Boolean read FPriceChange write FPriceChange;
  29. property BGLCode: Boolean read FBGLCode write FBGLCode;
  30. property Design: Boolean read FDesign write FDesign;
  31. property Alias: Boolean read FAlias write FAlias;
  32. end;
  33. TColVisibleManager = class
  34. private
  35. FColVisibles: TList;
  36. protected
  37. function CreateColVisible(ACol: TsdGridColumn): TColVisible; virtual;
  38. public
  39. constructor Create(ACols: TsdGridColumnList);
  40. destructor Destroy; override;
  41. procedure RefreshVisible;
  42. procedure ShowGridCol(AShow: Boolean; ABeginCol, AEndCol: Integer);
  43. end;
  44. TBM_ColVisibleManager = class(TColVisibleManager)
  45. protected
  46. function CreateColVisible(ACol: TsdGridColumn): TColVisible; override;
  47. public
  48. procedure ShowPriceChange(AShow: Boolean);
  49. procedure ShowBGLCode(AShow: Boolean);
  50. procedure ShowDesign(AShow: Boolean);
  51. procedure ShowAlias(AShow: Boolean);
  52. procedure ShowApprovalCode(AShow: Boolean);
  53. end;
  54. implementation
  55. uses SysUtils;
  56. { TColVisible }
  57. constructor TColVisible.Create(ACol: TsdGridColumn);
  58. begin
  59. FDBACol := ACol;
  60. FDefaultCAC := StrToIntDef(FDBACol.Title.CaptionAcrossCols, 1);
  61. FCustom := FDBACol.Visible;
  62. end;
  63. procedure TColVisible.RefreshVisible;
  64. begin
  65. FDBACol.Visible := FCustom;
  66. end;
  67. { TBM_ColVisible }
  68. constructor TBM_ColVisible.Create(ACol: TsdGridColumn);
  69. begin
  70. inherited;
  71. FPriceChange := True;
  72. FBGLCode := True;
  73. FDesign := True;
  74. FAlias := True;
  75. end;
  76. procedure TBM_ColVisible.RefreshVisible;
  77. begin
  78. FDBACol.Visible := FCustom and FPriceChange and FBGLCode and FDesign and FAlias;
  79. end;
  80. { TColVisibleManager }
  81. constructor TColVisibleManager.Create(ACols: TsdGridColumnList);
  82. var
  83. iCol: Integer;
  84. ColVisible: TColVisible;
  85. begin
  86. FColVisibles := TList.Create;
  87. for iCol := 0 to ACols.Count - 1 do
  88. begin
  89. ColVisible := CreateColVisible(ACols.Items[iCol]);
  90. FColVisibles.Add(ColVisible);
  91. end;
  92. end;
  93. function TColVisibleManager.CreateColVisible(
  94. ACol: TsdGridColumn): TColVisible;
  95. begin
  96. Result := TColVisible.Create(ACol);
  97. end;
  98. destructor TColVisibleManager.Destroy;
  99. begin
  100. ClearObjects(FColVisibles);
  101. FColVisibles.Free;
  102. inherited;
  103. end;
  104. procedure TColVisibleManager.RefreshVisible;
  105. var
  106. iCol: Integer;
  107. begin
  108. for iCol := 0 to FColVisibles.Count - 1 do
  109. TColVisible(FColVisibles.Items[iCol]).RefreshVisible;
  110. end;
  111. procedure TColVisibleManager.ShowGridCol(AShow: Boolean; ABeginCol,
  112. AEndCol: Integer);
  113. var
  114. iCol, iRelaCol: Integer;
  115. vCol, vRelaCol: TColVisible;
  116. begin
  117. for iCol := ABeginCol to AEndCol do
  118. begin
  119. vCol := TColVisible(FColVisibles.Items[iCol]);
  120. if Pos('|', vCol.DBACol.Title.Caption) <> 1 then
  121. begin
  122. vCol.Custom := AShow;
  123. if vCol.DefaultCAC > 1 then
  124. begin
  125. for iRelaCol := 1 to vCol.DefaultCAC - 1 do
  126. begin
  127. vRelaCol := TColVisible(FColVisibles.Items[iCol+iRelaCol]);
  128. vRelaCol.Custom := AShow;
  129. end;
  130. end;
  131. end;
  132. end;
  133. RefreshVisible;
  134. end;
  135. { TBM_ColVisibleManager }
  136. function TBM_ColVisibleManager.CreateColVisible(
  137. ACol: TsdGridColumn): TColVisible;
  138. begin
  139. Result := TBM_ColVisible.Create(ACol);
  140. end;
  141. procedure TBM_ColVisibleManager.ShowAlias(AShow: Boolean);
  142. var
  143. iCol: Integer;
  144. vCol: TBM_ColVisible;
  145. begin
  146. for iCol := 0 to FColVisibles.Count - 1 do
  147. begin
  148. vCol := TBM_ColVisible(FColVisibles.Items[iCol]);
  149. if SameText('Alias', vCol.DBACol.FieldName) then
  150. vCol.FAlias := AShow;
  151. end;
  152. RefreshVisible;
  153. end;
  154. procedure TBM_ColVisibleManager.ShowApprovalCode(AShow: Boolean);
  155. var
  156. iCol: Integer;
  157. vCol: TBM_ColVisible;
  158. begin
  159. for iCol := 0 to FColVisibles.Count - 1 do
  160. begin
  161. vCol := TBM_ColVisible(FColVisibles.Items[iCol]);
  162. if SameText('ApprovalCode', vCol.DBACol.FieldName) then
  163. vCol.FAlias := AShow;
  164. end;
  165. RefreshVisible;
  166. end;
  167. procedure TBM_ColVisibleManager.ShowBGLCode(AShow: Boolean);
  168. var
  169. iCol: Integer;
  170. vCol: TBM_ColVisible;
  171. begin
  172. for iCol := 0 to FColVisibles.Count - 1 do
  173. begin
  174. vCol := TBM_ColVisible(FColVisibles.Items[iCol]);
  175. if SameText('CurQcQuantity', vCol.DBACol.FieldName) or
  176. SameText('CurPcQuantity', vCol.DBACol.FieldName) then
  177. begin
  178. if AShow then
  179. vCol.DBACol.Title.CaptionAcrossCols := '3'
  180. else
  181. vCol.DBACol.Title.CaptionAcrossCols := '2';
  182. end
  183. else if Pos('BGLCode', vCol.DBACol.FieldName) > 1 then
  184. vCol.FBGLCode := AShow;
  185. end;
  186. RefreshVisible;
  187. end;
  188. procedure TBM_ColVisibleManager.ShowDesign(AShow: Boolean);
  189. var
  190. iCol: Integer;
  191. vCol: TBM_ColVisible;
  192. begin
  193. for iCol := 0 to FColVisibles.Count - 1 do
  194. begin
  195. vCol := TBM_ColVisible(FColVisibles.Items[iCol]);
  196. if Pos('Dgn', vCol.DBACol.FieldName) > 1 then
  197. vCol.FDesign := AShow;
  198. end;
  199. RefreshVisible;
  200. end;
  201. procedure TBM_ColVisibleManager.ShowPriceChange(AShow: Boolean);
  202. var
  203. iCol: Integer;
  204. vCol: TBM_ColVisible;
  205. begin
  206. for iCol := 0 to FColVisibles.Count - 1 do
  207. begin
  208. vCol := TBM_ColVisible(FColVisibles.Items[iCol]);
  209. if SameText(vCol.DBACol.FieldName, 'NewPrice') or
  210. (Pos('CurPc', vCol.DBACol.FieldName) = 1) or
  211. (Pos('EndPc', vCol.DBACol.FieldName) = 1) or
  212. (Pos('AddPc', vCol.DBACol.FieldName) = 1) then
  213. vCol.PriceChange := AShow;
  214. end;
  215. RefreshVisible;
  216. end;
  217. end.