Ignore:
Timestamp:
Dec 29, 2010, 1:56:04 PM (14 years ago)
Author:
george
Message:
  • Fixed: Hiding invisible docked forms as tabs.
  • Added: Ability to bring window to front on execute Form.Show.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Docking/CoolDocking/UCoolDocking.pas

    r98 r103  
    3232    CoolDockClient: TCoolDockClient;
    3333    procedure FormShow(Sender : TObject);
     34    procedure FormHide(Sender : TObject);
    3435    constructor Create(TheOwner: TComponent); override;
     36    destructor Destroy; override;
     37  private
     38    procedure PanelVisibleChange(Sender: TObject);
    3539  end;
    3640
    3741  TDockStyle = (dsList, dsTabs, dsPopupTabs, dsPopupList);
     42
     43  // TObjectList<TCoolDockClientPanel>
     44
     45  { TCoolDockPanels }
     46
     47  TCoolDockPanels = class(TObjectList)
     48    destructor Destroy; override;
     49  end;
    3850
    3951  { TCoolDockManager }
     
    4254  private
    4355    FMaster: TCoolDockMaster;
    44     DockStyleHandler: TCoolDockStyle;
    4556    FDockStyle: TDockStyle;
    4657    FDockDirection: TDockDirection;
    4758    FDockSite: TWinControl;
    48     FDockPanels: TObjectList; // TObjectList<TCoolDockClientPanel>
    49     function FindControlInPanels(Control: TControl): TCoolDockClientPanel;
     59    FDockPanels: TCoolDockPanels;
    5060    function GetDockSite: TWinControl;
     61    function GetHeaderPos: THeaderPos;
    5162    function GetMoveDuration: Integer;
    5263    procedure InsertControlPanel(Control: TControl; InsertAt: TAlign;
    5364      DropCtl: TControl);
    5465    procedure SetDockStyle(const AValue: TDockStyle);
     66    procedure SetHeaderPos(const AValue: THeaderPos);
    5567    procedure SetMaster(const AValue: TCoolDockMaster);
    5668    procedure SetMoveDuration(const AValue: Integer);
     69    procedure SetVisible(const AValue: Boolean);
    5770    procedure UpdateClientSize;
    5871  public
     72    DockStyleHandler: TCoolDockStyle;
    5973    PopupMenu: TCoolDockPopupMenu;
    6074    constructor Create(ADockSite: TWinControl); override;
     
    8296    function AutoFreeByControl: Boolean; override;
    8397
     98    function FindControlInPanels(Control: TControl): TCoolDockClientPanel;
    8499    function CreateContainer(InsertAt: TAlign): TCoolDockConjoinForm;
    85     property DockPanels: TObjectList read FDockPanels write FDockPanels;
     100    property DockPanels: TCoolDockPanels read FDockPanels write FDockPanels;
    86101    property DockStyle: TDockStyle read FDockStyle write SetDockStyle;
    87102    property MoveDuration: Integer read GetMoveDuration write SetMoveDuration;
    88103    property Master: TCoolDockMaster read FMaster write SetMaster;
    89104    property DockSite: TWinControl read GetDockSite;
     105    property HeaderPos: THeaderPos read GetHeaderPos write SetHeaderPos;
     106    property Visible: Boolean write SetVisible;
    90107  end;
    91108
     
    194211end;
    195212
     213{ TCoolDockPanels }
     214
     215destructor TCoolDockPanels.Destroy;
     216var
     217  Temp: Integer;
     218begin
     219  Temp := Count;
     220  inherited Destroy;
     221end;
     222
    196223
    197224{ TCoolDockManager }
     
    214241end;
    215242
     243function TCoolDockManager.GetHeaderPos: THeaderPos;
     244begin
     245
     246end;
     247
    216248function TCoolDockManager.GetMoveDuration: Integer;
    217249begin
     
    226258  inherited Create(ADockSite);
    227259  FDockSite := ADockSite;
    228   FDockPanels := TObjectList.Create;
     260  FDockPanels := TCoolDockPanels.Create;
    229261
    230262  FDockStyle := dsTabs; // To initialize style value have to be different
    231263  DockStyle := dsList;
    232264  PopupMenu := TCoolDockPopupMenu.Create(Self);
     265  PopupMenu.Parent := ADockSite;
    233266end;
    234267
     
    236269begin
    237270  PopupMenu.Free;
     271  DockStyleHandler.Free;
    238272  FDockPanels.Free;
    239   DockStyleHandler.Free;
    240273  inherited Destroy;
    241274end;
     
    309342      if DockStyle = dsList then Visible := True;
    310343      Align := alClient;
    311       Header.PopupMenu := PopupMenu;
     344      Header.PopupMenu := Self.PopupMenu;
     345      //PopupMenu.Parent := Self.DockSite;
    312346    end;
    313347    if (Control is TForm) and Assigned((Control as TForm).Icon) then
     
    417451  if Control.HostDockSite = Self.FDockSite then begin
    418452    ClientPanel := FindControlInPanels(Control);
     453
    419454    //if Assigned(ClientPanel) then ClientPanel.Splitter.Free;
     455    //Control.RemoveHandlerOnVisibleChanged(ClientPanel.VisibleChange);
    420456    FDockPanels.Remove(ClientPanel);
    421457    if FDockSite.DockClientCount = 2 then FDockDirection := ddNone;
     
    474510    if AValue = dsTabs then begin
    475511      DockStyleHandler := TCoolDockStyleTabs.Create(Self);
     512      TCoolDockStyleTabs(DockStyleHandler).TabControlChange(Self);
    476513    end else
    477514    if AValue = dsList then begin
     
    488525end;
    489526
     527procedure TCoolDockManager.SetHeaderPos(const AValue: THeaderPos);
     528begin
     529
     530end;
     531
    490532procedure TCoolDockManager.SetMaster(const AValue: TCoolDockMaster);
    491533begin
     
    498540end;
    499541
     542procedure TCoolDockManager.SetVisible(const AValue: Boolean);
     543var
     544  I: Integer;
     545begin
     546//  for I := 0 to DockPanels.Count - 1 do
     547//    TCoolDockClientPanel(DockPanels[I]).Visible := AValue;
     548end;
     549
    500550procedure TCoolDockManager.UpdateClientSize;
    501551begin
     
    507557procedure TCoolDockConjoinForm.FormShow(Sender: TObject);
    508558begin
    509   //Panel.Show;
     559  Panel.Show;
     560  TCoolDockManager(Panel.DockManager).Visible := True;
     561end;
     562
     563procedure TCoolDockConjoinForm.FormHide(Sender: TObject);
     564var
     565  I: Integer;
     566begin
     567  Panel.Hide;
     568  TCoolDockManager(Panel.DockManager).Visible := False;
     569  // Hide all docked childs
     570  with TCoolDockManager(Panel.DockManager) do
     571  for I := 0 to DockPanels.Count - 1 do
     572    if Assigned(TCoolDockClientPanel(DockPanels[I]).Control) then
     573    TCoolDockClientPanel(DockPanels[I]).Control.Hide;
    510574end;
    511575
     
    517581    Parent := Self;
    518582    Name := Parent.Name + '_Panel';
     583    Caption := '';
    519584    DockSite := True;
    520585    UseDockManager := True;
     
    530595  end;
    531596  OnShow := FormShow;
     597  OnHide := FormHide;
     598
     599  Panel.AddHandlerOnVisibleChanged(PanelVisibleChange);
     600end;
     601
     602destructor TCoolDockConjoinForm.Destroy;
     603begin
     604  Panel.RemoveHandlerOnVisibleChanged(PanelVisibleChange);
     605  inherited;
     606end;
     607
     608procedure TCoolDockConjoinForm.PanelVisibleChange(Sender: TObject);
     609begin
     610  Visible := Panel.Visible;
    532611end;
    533612
Note: See TracChangeset for help on using the changeset viewer.