home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / nastroje / d3456 / KBMWABD.ZIP / WABD_FramesetEditor.pas < prev    next >
Pascal/Delphi Source File  |  2001-07-15  |  4KB  |  180 lines

  1. unit WABD_FramesetEditor;
  2.  
  3. {$I kbmWABD.inc}
  4.  
  5. interface
  6.  
  7. uses
  8. {$ifdef LEVEL6}
  9.   DesignIntf,
  10. {$else}
  11.   DsgnIntf,
  12. {$endif}
  13.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14.   StdCtrls, Buttons, WABD_Objects, ShellAPI;
  15.  
  16. type
  17.   TWABDFramesetEditor = class(TForm)
  18.     ChildrenBox: TListBox;
  19.     UpBut: TSpeedButton;
  20.     DownBut: TSpeedButton;
  21.     Label1: TLabel;
  22.     procedure FormDestroy(Sender: TObject);
  23.     procedure ChildrenBoxChange(Sender: TObject);
  24.     procedure UpButClick(Sender: TObject);
  25.     procedure DownButClick(Sender: TObject);
  26.   private
  27.     { Private declarations }
  28.     FWABDFrameSet  : TWABD_FrameSet;
  29.   protected
  30.     procedure ReflectedNotify(Sender: TObject; AComponent: TComponent; Operation: TOperation);
  31.     procedure ChildNameChanged(Sender: TObject; const OldName, NewName: string);
  32.   public
  33.     { Public declarations }
  34. {$ifdef LEVEL6}
  35.     MyDesigner   : IDesigner;
  36. {$else}
  37.  {$ifdef LEVEL5}
  38.     MyDesigner   : IFormDesigner;
  39.  {$else}
  40.   {$ifdef LEVEL4}
  41.     MyDesigner   : IFormDesigner;
  42.   {$else}
  43.    {$ifdef LEVEL3}
  44.     MyDesigner   : TFormDesigner; // Delphi 3, C++ Builder 3
  45.    {$endif}
  46.   {$endif}
  47.  {$endif}
  48. {$endif}
  49.  
  50.     property  WABDFrameset: TWABD_Frameset read FWABDFrameset write FWABDFrameset;
  51.     procedure Initialize;
  52.   end;
  53.  
  54. var
  55.   WABDFramesetEditor: TWABDFramesetEditor;
  56.  
  57. implementation
  58.  
  59. {$R *.DFM}
  60.  
  61. procedure TWABDFramesetEditor.Initialize;
  62. var
  63.    c: TWABD_Object;
  64.    i:integer;
  65. begin
  66.      Caption := 'WABD Frameset Designer - ' + WABDFrameset.Name;
  67.      Assert(MyDesigner<>nil, 'Designer = nil');
  68.  
  69.      WABDFrameset.RefNotify := ReflectedNotify;
  70.      WABDFrameset.OnChildNameChanged := ChildNameChanged;
  71.  
  72.      Assert(WABDFrameset<>nil, 'WABDFrameset = nil');
  73.      ChildrenBox.Items.Clear;
  74.      for i := 0 to WABDFrameset.ChildCount-1 do begin
  75.          c := WABDFrameset.Children[i];
  76.          Assert(c<>nil, 'c = nil');
  77.          ChildrenBox.Items.Add(c.Name);
  78.      end;
  79.      ChildrenBoxChange(Self);
  80. end;
  81.  
  82. procedure TWABDFramesetEditor.ChildNameChanged(Sender: TObject; const OldName, NewName: string);
  83. var
  84.    i : integer;
  85. begin
  86.    i := ChildrenBox.Items.IndexOf(OldName);
  87.    if i<>-1 then ChildrenBox.Items[i] := NewName;
  88. end;
  89.  
  90. // I had to do this hack because Delphi 3 won't let me compile with
  91. // the DsgnWnds unit.
  92. procedure TWABDFramesetEditor.ReflectedNotify(Sender: TObject; AComponent: TComponent; Operation: TOperation);
  93. var
  94.    i : integer;
  95. begin
  96.    if (Operation <> opRemove) then exit;
  97.  
  98.    if AComponent=WABDFrameset then begin
  99.       WABDFrameset.RefNotify := nil;
  100.       WABDFrameset := nil;
  101.       Visible  := False;
  102.    end;
  103.  
  104.    i := ChildrenBox.Items.IndexOf(AComponent.Name);
  105.    if i<>-1 then begin
  106.       ChildrenBox.Items.Delete(i);
  107.       if ChildrenBox.Items.Count=0 then ChildrenBox.Items.Clear;  // ComboBox Bug
  108.       ChildrenBoxChange(Self);
  109.    end;
  110. end;
  111.  
  112.  
  113.  
  114. procedure TWABDFramesetEditor.FormDestroy(Sender: TObject);
  115. begin
  116.    if WABDFrameset<>nil then WABDFrameset.RefNotify := nil;
  117. end;
  118.  
  119. procedure TWABDFramesetEditor.ChildrenBoxChange(Sender: TObject);
  120. var
  121.    c        : TWABD_Object;
  122.    ni       : integer;
  123. begin
  124.    ni := ChildrenBox.ItemIndex;
  125.  
  126.    UpBut.Enabled     := ni<>-1;
  127.    DownBut.Enabled   := ni<>-1;
  128.  
  129.    if ni = -1 then exit;
  130.  
  131.    if ni<>-1 then
  132.    begin
  133.       c := WABDFrameset.ChildByName(ChildrenBox.Items[ni]);
  134.       Assert(c<>nil, 'c = nil');
  135.       MyDesigner.SelectComponent(c);
  136.    end;
  137. end;
  138.  
  139. procedure TWABDFramesetEditor.UpButClick(Sender: TObject);
  140. var
  141.    c     : TWABD_Object;
  142.    ni    : integer;
  143.    n     : string;
  144. begin
  145.    ni := ChildrenBox.ItemIndex;
  146.    if ni=-1 then exit;
  147.  
  148.    c := WABDFrameset.ChildByName(ChildrenBox.Items[ni]);
  149.    Assert(c<>nil, 'c = nil');
  150.    n := c.Name;
  151.  
  152.    c.Order := c.Order-1;
  153.    MyDesigner.Modified;
  154.    Initialize;
  155.    ChildrenBox.ItemIndex := ChildrenBox.Items.IndexOf(n);
  156.    ChildrenBoxChange(Self);
  157. end;
  158.  
  159. procedure TWABDFramesetEditor.DownButClick(Sender: TObject);
  160. var
  161.    c     : TWABD_Object;
  162.    ni    : integer;
  163.    n     : string;
  164. begin
  165.    ni := ChildrenBox.ItemIndex;
  166.    if ni=-1 then exit;
  167.  
  168.    c := WABDFrameset.ChildByName(ChildrenBox.Items[ni]);
  169.    Assert(c<>nil, 'c = nil');
  170.    n := c.Name;
  171.  
  172.    c.Order := c.Order+1;
  173.    MyDesigner.Modified;
  174.    Initialize;
  175.    ChildrenBox.ItemIndex := ChildrenBox.Items.IndexOf(n);
  176.    ChildrenBoxChange(Self);
  177. end;
  178.  
  179. end.
  180.