home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Runimage / Delphi50 / Source / Vcl / DBACTNS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-11  |  6.8 KB  |  279 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1999 Inprise Corporation          }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DBActns;
  11.  
  12. {$H+,X+}
  13.  
  14. interface
  15.  
  16. uses Classes, ActnList, Db;
  17.  
  18. type
  19.   { DataSet actions }
  20.   TDataSetAction = class(TAction)
  21.   private
  22.     FDataSource: TDataSource;
  23.     procedure SetDataSource(Value: TDataSource);
  24.   protected
  25.     function GetDataSet(Target: TObject): TDataSet; virtual;
  26.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  27.   public
  28.     function HandlesTarget(Target: TObject): Boolean; override;
  29.     property DataSource: TDataSource read FDataSource write SetDataSource;
  30.   end;
  31.  
  32.   TDataSetFirst = class(TDataSetAction)
  33.   public
  34.     procedure ExecuteTarget(Target: TObject); override;
  35.     procedure UpdateTarget(Target: TObject); override;
  36.   published
  37.     property DataSource;
  38.   end;
  39.  
  40.   TDataSetPrior = class(TDataSetAction)
  41.   public
  42.     procedure ExecuteTarget(Target: TObject); override;
  43.     procedure UpdateTarget(Target: TObject); override;
  44.   published
  45.     property DataSource;
  46.   end;
  47.  
  48.   TDataSetNext = class(TDataSetAction)
  49.   public
  50.     procedure ExecuteTarget(Target: TObject); override;
  51.     procedure UpdateTarget(Target: TObject); override;
  52.   published
  53.     property DataSource;
  54.   end;
  55.  
  56.   TDataSetLast = class(TDataSetAction)
  57.   public
  58.     procedure ExecuteTarget(Target: TObject); override;
  59.     procedure UpdateTarget(Target: TObject); override;
  60.   published
  61.     property DataSource;
  62.   end;
  63.  
  64.   TDataSetInsert = class(TDataSetAction)
  65.   public
  66.     procedure ExecuteTarget(Target: TObject); override;
  67.     procedure UpdateTarget(Target: TObject); override;
  68.   published
  69.     property DataSource;
  70.   end;
  71.  
  72.   TDataSetDelete = class(TDataSetAction)
  73.   public
  74.     procedure ExecuteTarget(Target: TObject); override;
  75.     procedure UpdateTarget(Target: TObject); override;
  76.   published
  77.     property DataSource;
  78.   end;
  79.  
  80.   TDataSetEdit = class(TDataSetAction)
  81.   public
  82.     procedure ExecuteTarget(Target: TObject); override;
  83.     procedure UpdateTarget(Target: TObject); override;
  84.   published
  85.     property DataSource;
  86.   end;
  87.  
  88.   TDataSetPost = class(TDataSetAction)
  89.   public
  90.     procedure ExecuteTarget(Target: TObject); override;
  91.     procedure UpdateTarget(Target: TObject); override;
  92.   published
  93.     property DataSource;
  94.   end;
  95.  
  96.   TDataSetCancel = class(TDataSetAction)
  97.   public
  98.     procedure ExecuteTarget(Target: TObject); override;
  99.     procedure UpdateTarget(Target: TObject); override;
  100.   published
  101.     property DataSource;
  102.   end;
  103.  
  104.   TDataSetRefresh = class(TDataSetAction)
  105.   public
  106.     procedure ExecuteTarget(Target: TObject); override;
  107.     procedure UpdateTarget(Target: TObject); override;
  108.   published
  109.     property DataSource;
  110.   end;
  111.  
  112. implementation
  113.  
  114. { TDataSetAction }
  115.  
  116. function TDataSetAction.GetDataSet(Target: TObject): TDataSet;
  117. begin
  118.   { We could cast Target as a TDataSource since HandlesTarget "should" be
  119.     called before ExecuteTarget and UpdateTarget, however, we're being safe. }
  120.   Result := (Target as TDataSource).DataSet;
  121. end;
  122.  
  123. function TDataSetAction.HandlesTarget(Target: TObject): Boolean;
  124. begin
  125.   { Only handle Target if we don't already have a DataSource assigned and the
  126.     Target is a TDataSource with a non nil DataSet assigned. }
  127.   Result := (DataSource <> nil) and (Target = DataSource) and
  128.     (DataSource.DataSet <> nil) or (DataSource = nil) and
  129.     (Target is TDataSource) and (TDataSource(Target).DataSet <> nil);
  130. end;
  131.  
  132. procedure TDataSetAction.Notification(AComponent: TComponent;
  133.   Operation: TOperation);
  134. begin
  135.   inherited Notification(AComponent, Operation);
  136.   if (Operation = opRemove) and (AComponent = DataSource) then DataSource := nil;
  137. end;
  138.  
  139. procedure TDataSetAction.SetDataSource(Value: TDataSource);
  140. begin
  141.   if Value <> FDataSource then
  142.   begin
  143.     FDataSource := Value;
  144.     if Value <> nil then Value.FreeNotification(Self);
  145.   end;
  146. end;
  147.  
  148. { TDataSetFirst }
  149.  
  150. procedure TDataSetFirst.ExecuteTarget(Target: TObject);
  151. begin
  152.   GetDataSet(Target).First;
  153. end;
  154.  
  155. procedure TDataSetFirst.UpdateTarget(Target: TObject);
  156. begin
  157.   with GetDataSet(Target) do
  158.     Enabled := Active and not Bof;
  159. end;
  160.  
  161. { TDataSetPrior }
  162.  
  163. procedure TDataSetPrior.ExecuteTarget(Target: TObject);
  164. begin
  165.   GetDataSet(Target).Prior;
  166. end;
  167.  
  168. procedure TDataSetPrior.UpdateTarget(Target: TObject);
  169. begin
  170.   with GetDataSet(Target) do
  171.     Enabled := Active and not Bof;
  172. end;
  173.  
  174. { TDataSetNext }
  175.  
  176. procedure TDataSetNext.ExecuteTarget(Target: TObject);
  177. begin
  178.   GetDataSet(Target).Next;
  179. end;
  180.  
  181. procedure TDataSetNext.UpdateTarget(Target: TObject);
  182. begin
  183.   with GetDataSet(Target) do
  184.     Enabled := Active and not Eof;
  185. end;
  186.  
  187. { TDataSetLast }
  188.  
  189. procedure TDataSetLast.ExecuteTarget(Target: TObject);
  190. begin
  191.   GetDataSet(Target).Last;
  192. end;
  193.  
  194. procedure TDataSetLast.UpdateTarget(Target: TObject);
  195. begin
  196.   with GetDataSet(Target) do
  197.     Enabled := Active and not Eof;
  198. end;
  199.  
  200. { TDataSetInsert }
  201.  
  202. procedure TDataSetInsert.ExecuteTarget(Target: TObject);
  203. begin
  204.   GetDataSet(Target).Insert;
  205. end;
  206.  
  207. procedure TDataSetInsert.UpdateTarget(Target: TObject);
  208. begin
  209.   with GetDataSet(Target) do
  210.     Enabled := Active and CanModify;
  211. end;
  212.  
  213. { TDataSetRefresh }
  214.  
  215. procedure TDataSetRefresh.ExecuteTarget(Target: TObject);
  216. begin
  217.   GetDataSet(Target).Refresh;
  218. end;
  219.  
  220. procedure TDataSetRefresh.UpdateTarget(Target: TObject);
  221. begin
  222.   with GetDataSet(Target) do
  223.     Enabled := Active and CanModify;
  224. end;
  225.  
  226. { TDataSetPost }
  227.  
  228. procedure TDataSetPost.ExecuteTarget(Target: TObject);
  229. begin
  230.   GetDataSet(Target).Post;
  231. end;
  232.  
  233. procedure TDataSetPost.UpdateTarget(Target: TObject);
  234. begin
  235.   with GetDataSet(Target) do
  236.     Enabled := Active and CanModify and (State in dsEditModes);
  237. end;
  238.  
  239. { TDataSetCancel }
  240.  
  241. procedure TDataSetCancel.ExecuteTarget(Target: TObject);
  242. begin
  243.   GetDataSet(Target).Cancel;
  244. end;
  245.  
  246. procedure TDataSetCancel.UpdateTarget(Target: TObject);
  247. begin
  248.   with GetDataSet(Target) do
  249.     Enabled := Active and CanModify and (State in dsEditModes);
  250. end;
  251.  
  252. { TDataSetEdit }
  253.  
  254. procedure TDataSetEdit.ExecuteTarget(Target: TObject);
  255. begin
  256.   GetDataSet(Target).Edit;
  257. end;
  258.  
  259. procedure TDataSetEdit.UpdateTarget(Target: TObject);
  260. begin
  261.   with GetDataSet(Target) do
  262.     Enabled := Active and CanModify and not (State in dsEditModes);
  263. end;
  264.  
  265. { TDataSetDelete }
  266.  
  267. procedure TDataSetDelete.ExecuteTarget(Target: TObject);
  268. begin
  269.   GetDataSet(Target).Delete;
  270. end;
  271.  
  272. procedure TDataSetDelete.UpdateTarget(Target: TObject);
  273. begin
  274.   with GetDataSet(Target) do
  275.     Enabled := Active and CanModify and not (Bof and Eof);
  276. end;
  277.  
  278. end.
  279.