home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue54 / Persist / FMain.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2000-01-21  |  7.4 KB  |  257 lines

  1. {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2.   (c) TechInsite Pty. Ltd.
  3.   PO Box 429, Abbotsford, Melbourne. 3067 Australia
  4.   Phone: +61 3 9419 6456
  5.   Fax:   +61 3 9419 1682
  6.   Web:   www.techinsite.com.au
  7.   EMail: peter_hinrichsen@techinsite.com.au
  8.  
  9.   Created: Jan 2000
  10.  
  11.   Notes: Address book application's main form
  12.  
  13. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
  14. unit FMain;
  15.  
  16. interface
  17.  
  18. uses
  19.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  20.   Grids, DBGrids, Db, DBTables, IBDatabase, StdCtrls, ComCtrls, tiListView,
  21.   tiTreeView, ExtCtrls, tiTreeViewPlus, ToolWin
  22.   ,Adrs_BOM, ActnList, Menus, ImgList
  23.   ;
  24.  
  25. type
  26.   TFormMain = class(TForm)
  27.     TV: TtiTreeViewPlus;
  28.     ToolBar1: TToolBar;
  29.     ToolButton1: TToolButton;
  30.     ToolButton3: TToolButton;
  31.     ToolButton2: TToolButton;
  32.     ToolButton4: TToolButton;
  33.     ToolButton5: TToolButton;
  34.     ToolButton6: TToolButton;
  35.     ToolButton7: TToolButton;
  36.     ActionList1: TActionList;
  37.     MainMenu1: TMainMenu;
  38.     File1: TMenuItem;
  39.     N1: TMenuItem;
  40.     N2: TMenuItem;
  41.     aNew: TAction;
  42.     aDelete: TAction;
  43.     aSave: TAction;
  44.     aCancel: TAction;
  45.     aClose: TAction;
  46.     aNew1: TMenuItem;
  47.     aSave1: TMenuItem;
  48.     aDelete1: TMenuItem;
  49.     N3: TMenuItem;
  50.     aClose1: TMenuItem;
  51.     ImageList1: TImageList;
  52.     procedure TVClose(Sender: TObject);
  53.     procedure FormCreate(Sender: TObject);
  54.     procedure TVGetDataPage(pData: TObject; pNode: TTreeNode);
  55.     procedure TVSave(Sender: TObject);
  56.     procedure TVNew(ptiTreeView: TtiTreeView; pNode,pParentNode: TTreeNode; pData: TObject);
  57.     procedure TVDelete(ptiTreeView: TtiTreeView; pNode: TTreeNode;pData: TObject);
  58.     procedure TVCancel(Sender: TObject);
  59.     procedure aNewExecute(Sender: TObject);
  60.     procedure aDeleteExecute(Sender: TObject);
  61.     procedure ActionList1Update(Action: TBasicAction;var Handled: Boolean);
  62.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  63.     procedure FormDestroy(Sender: TObject);
  64.   private
  65.     FAddressBook : TAdrsBook ;
  66.     procedure Read;
  67.   public
  68.   end;
  69.  
  70. var
  71.   FormMain: TFormMain;
  72.  
  73. implementation
  74. uses
  75.    Adrs_SRV
  76.   ,tiPtnVisitorMgr
  77.   ,cAdrs
  78.   ,FEditPerson
  79.   ,DBNextOID
  80.   ;
  81.  
  82. {$R *.DFM}
  83.  
  84. // Form's OnCreate event
  85. //------------------------------------------------------------------------------
  86. procedure TFormMain.FormCreate(Sender: TObject);
  87. begin
  88.   TV.RegisterChildForm( TPerson, TFormEditPerson ) ;
  89.   Read ;
  90. end;
  91.  
  92. // Form's OnDestroy event
  93. //------------------------------------------------------------------------------
  94. procedure TFormMain.FormDestroy(Sender: TObject);
  95. begin
  96.   if FAddressBook <> nil then
  97.     FAddressBook.Free ;
  98. end;
  99.  
  100. // Create a TAddressBook object and read it's primary key data
  101. //------------------------------------------------------------------------------
  102. procedure TFormMain.Read ;
  103. begin
  104.   if FAddressBook <> nil then
  105.     FAddressBook.Free ;
  106.   TV.Data := nil ;
  107.   FAddressBook := TAdrsBook.Create ;
  108.   gVisitorCache.Execute( cgsAdrs_Read_PK, FAddressBook ) ;
  109.   TV.Data := FAddressBook ;
  110.   TV.FullExpand ;
  111. end;
  112.  
  113. // Form's CloseQuery event 
  114. //------------------------------------------------------------------------------
  115. procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  116. var
  117.   lAction : word ;
  118. begin
  119.   if not FAddressBook.Dirty then begin
  120.     CanClose := true ;
  121.     exit ; //==>
  122.   end ;
  123.  
  124.   if not TV.IsCurrentChildFormValid then
  125.     exit ; //==>
  126.  
  127.   lAction :=
  128.     MessageDlg( 'Do you want to save your changes before exiting?',
  129.                 mtWarning,
  130.                 [mbYes, mbNo, mbCancel],
  131.                 0 ) ;
  132.   case lAction of
  133.     mrYes    : begin
  134.                  gVisitorCache.Execute( cgsAdrs_Update, TAdrsBook( TV.Data )) ;
  135.                  CanClose := true ;
  136.                end ;
  137.     mrNo     : CanClose := true ;
  138.     mrCancel : CanClose := false ;
  139.   end ;
  140.  
  141. end;
  142.  
  143. // TtiTreeViewPlus close action
  144. //------------------------------------------------------------------------------
  145. procedure TFormMain.TVClose(Sender: TObject);
  146. begin
  147.   Close ;
  148. end;
  149.  
  150. // When a node on the TtiTreeViewPlus is selected, this event is triggered.
  151. // Read the detailed data associated with the node's data.
  152. //------------------------------------------------------------------------------
  153. procedure TFormMain.TVGetDataPage(pData: TObject; pNode: TTreeNode);
  154. begin
  155.   if pData is TPerson then
  156.     gVisitorCache.Execute( cgsAdrs_Read_Detail, TPerson( pData )) ;
  157. end;
  158.  
  159. // TtiTreeViewPlus save event
  160. //------------------------------------------------------------------------------
  161. procedure TFormMain.TVSave(Sender: TObject);
  162. begin
  163.   if not TV.IsCurrentChildFormValid then
  164.     exit ; //==>
  165.  
  166.   if not TAdrsBook( TV.Data ).Dirty then
  167.     exit ; //==>
  168.  
  169.   gVisitorCache.Execute( cgsAdrs_Update, TAdrsBook( TV.Data )) ;
  170.  
  171. end;
  172.  
  173. // TtiTreeViewPlus New event
  174. //------------------------------------------------------------------------------
  175. procedure TFormMain.TVNew(ptiTreeView: TtiTreeView; pNode,
  176.   pParentNode: TTreeNode; pData: TObject);
  177. var
  178.   lParentNode : TTreeNode ;
  179.   lOwner      : TPersonList ;
  180.   lData       : TPerson ;
  181.   lNode       : TTreeNode ;
  182. begin
  183.  
  184.   if pData is TPerson then begin
  185.     lParentNode := pParentNode ;
  186.     lOwner      := TPersonList( pParentNode.Data ) ;
  187.   end else if pData is TPersonList then begin
  188.     lParentNode := pNode ;
  189.     lOwner      := TPersonList( pData ) ;
  190.   end else
  191.     exit ; //==>
  192.  
  193.   lData := TPerson.CreateNew ;
  194.   lData.FirstName := 'Enter' ;
  195.   lData.LastName := 'Enter' ;
  196.   lOwner.Add( lData ) ;
  197.   lNode := ptiTreeView.Items.AddChildObject( lParentNode, lData.Caption, lData ) ;
  198.   ptiTreeView.Selected := lNode ;
  199.  
  200. end;
  201.  
  202. // TtiTreeViewPlus Delete event
  203. //------------------------------------------------------------------------------
  204. procedure TFormMain.TVDelete(ptiTreeView: TtiTreeView; pNode: TTreeNode; pData: TObject);
  205. begin
  206.   if not( pData is TPerson ) then
  207.     exit ; //==>
  208.  
  209.   if MessageDlg( 'Are you sure you want to delete <' +
  210.                  TPerson( pData ).Caption + '>?',
  211.                  mtConfirmation,
  212.                  [mbYes, mbNo],
  213.                  0 ) = mrYes then begin
  214.     TPerson( pData ).Deleted := true ;
  215.     ptiTreeView.Items.Delete( pNode ) ;
  216.   end;
  217.  
  218. end;
  219.  
  220. // TtiTreeViewPlus Cancel event
  221. //------------------------------------------------------------------------------
  222. procedure TFormMain.TVCancel(Sender: TObject);
  223. begin
  224.   Read ;
  225. end;
  226.  
  227. // ActionList's New event
  228. //------------------------------------------------------------------------------
  229. procedure TFormMain.aNewExecute(Sender: TObject);
  230. begin
  231.   TV.DoNew ;
  232. end;
  233.  
  234. // ActionList's Delete event
  235. //------------------------------------------------------------------------------
  236. procedure TFormMain.aDeleteExecute(Sender: TObject);
  237. begin
  238.   TV.DoDelete
  239. end;
  240.  
  241. // ActionList's OnUpdate event
  242. //------------------------------------------------------------------------------
  243. procedure TFormMain.ActionList1Update(Action: TBasicAction; var Handled: Boolean);
  244. begin
  245.   aNew.Enabled    := true ;
  246.   aDelete.Enabled := ( TV.Selected <> nil ) and
  247.                      ( TV.Selected.Data <> nil ) and
  248.                      ( TObject( TV.Selected.Data ) is TPerson ) ;
  249.   aSave.Enabled   := FAddressBook.Dirty ;
  250.   aCancel.Enabled := FAddressBook.Dirty ;
  251.   aClose.Enabled  := true ;
  252. end;
  253.  
  254.  
  255. end.
  256.  
  257.