Ignore:
Timestamp:
Mar 16, 2011, 12:32:41 PM (14 years ago)
Author:
george
Message:
  • Fixed: Popup submenus style and position item selection.
  • Added: Locking dock managers.
  • Modified: Enhanced auto popup tabs handling. Not yet finished.
  • Modified: Dock manager position united for all dock manager descendands.
Location:
Docking/CoolDocking/Managers
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Docking/CoolDocking/Managers/UCDManagerRegions.pas

    r197 r198  
    1717    PanelHeader: TCDPanelHeader;
    1818    Splitter: TSplitter;
     19    procedure Paint(Sender: TObject); override;
    1920    constructor Create;
    2021    destructor Destroy; override;
     
    2627  private
    2728    FDockItems: TObjectList; // TList<TCDManagerRegionsItem>
     29    function GetHeaderPos: THeaderPos; override;
     30    procedure SetHeaderPos(const AValue: THeaderPos); override;
    2831    function GetDirection(InsertAt: TAlign): TCDDirection;
    2932  public
     
    5356{ TCDManagerRegionsItem }
    5457
     58procedure TCDManagerRegionsItem.Paint(Sender: TObject);
     59var
     60  I: Integer;
     61  R: TRect;
     62begin
     63  inherited Paint(Sender);
     64  with PanelHeader do
     65  if not (csDesigning in ComponentState) then
     66  if Assigned(Control) then begin
     67    //R := Control.ClientRect;
     68    //Canvas.FillRect(R);
     69    Header.Visible := ShowHeader;
     70    if ShowHeader then begin
     71      if ControlPanel.DockClientCount = 0 then
     72        Header.DrawGrabber(Canvas, Control) else
     73      Header.DrawGrabber(Canvas, ControlPanel);
     74    end;
     75  end;
     76end;
     77
    5578constructor TCDManagerRegionsItem.Create;
    5679begin
     
    5982  PanelHeader.Header.OnMouseDown := DockPanelMouseDown;
    6083  PanelHeader.Header.Title.OnMouseDown := DockPanelMouseDown;
     84  PanelHeader.Header.Icon.OnMouseDown := DockPanelMouseDown;
    6185
    6286  Splitter := TSplitter.Create(nil);
     
    81105
    82106{ TCDManagerRegions }
     107
     108function TCDManagerRegions.GetHeaderPos: THeaderPos;
     109begin
     110  Result := inherited;
     111end;
     112
     113procedure TCDManagerRegions.SetHeaderPos(const AValue: THeaderPos);
     114begin
     115  inherited SetHeaderPos(AValue);
     116  case AValue of
     117    hpBottom, hpTop: FDockDirection := ddVertical;
     118    hpLeft, hpRight: FDockDirection := ddHorizontal;
     119  end;
     120end;
    83121
    84122function TCDManagerRegions.GetDirection(InsertAt: TAlign): TCDDirection;
     
    117155    PanelHeader.Header.PopupMenu := Self.PopupMenu;
    118156  end;
    119   if (Control is TForm) and Assigned((Control as TForm).Icon) then
     157  if (Control is TForm) and Assigned((Control as TForm).Icon) then begin
    120158    NewItem.PanelHeader.Header.Icon.Picture.Assign((Control as TForm).Icon);
    121     NewItem.PanelHeader.Parent := DockSite;
    122     NewItem.PanelHeader.Header.Title.Caption := TForm(Control).Caption;
    123 
    124     NewItem.Control := Control;
    125     Control.AddHandlerOnVisibleChanged(NewItem.VisibleChange);
    126     Control.Parent := NewItem.PanelHeader.ControlPanel;
    127     Control.Align := alClient;
    128     if (InsertAt = alTop) or (InsertAt = alLeft) then
    129       DockItems.Insert(0, NewItem)
    130       else DockItems.Add(NewItem);
    131   end;
     159    NewItem.PanelHeader.Header.Icon.Width := NewItem.PanelHeader.Header.Icon.Picture.Bitmap.Width;
     160    NewItem.PanelHeader.Header.Icon.Height := NewItem.PanelHeader.Header.Icon.Picture.Bitmap.Height;
     161  end;
     162
     163  NewItem.PanelHeader.Parent := DockSite;
     164  NewItem.PanelHeader.Header.Title.Caption := TForm(Control).Caption;
     165
     166  NewItem.Control := Control;
     167  Control.AddHandlerOnVisibleChanged(NewItem.VisibleChange);
     168  Control.Parent := NewItem.PanelHeader.ControlPanel;
     169  Control.Align := alClient;
     170  if (InsertAt = alTop) or (InsertAt = alLeft) then
     171    DockItems.Insert(0, NewItem)
     172    else DockItems.Add(NewItem);
     173end;
    132174
    133175procedure TCDManagerRegions.InsertControlPanel(Control: TControl; InsertAt: TAlign;
     
    248290    PanelHeader.Width := Self.DockSite.Width div
    249291      Self.DockSite.DockClientCount;
    250     //TCDClientPanel(FDockPanels[I]).DockPanelPaint(Self);
     292    Paint(Self);
    251293    if I < (DockItems.Count - 1) then PanelHeader.Align := BaseAlign
    252294      else PanelHeader.Align := alClient;
  • Docking/CoolDocking/Managers/UCDManagerTabs.pas

    r195 r198  
    1616  TCDManagerTabsItem = class(TCDManagerItem)
    1717    Icon: TImage;
    18     constructor Create;
     18    constructor Create; override;
    1919    destructor Destroy; override;
    2020  end;
     
    2323
    2424  TCDManagerTabs = class(TCDManager)
    25   public
     25  private
    2626    MouseDown: Boolean;
    2727    MouseButton: TMouseButton;
    2828    MouseDownSkip: Boolean;
    29     PageControl: TPageControl;
    30     TabImageList: TImageList;
    3129    FDockItems: TObjectList; // TList<TCDManagerRegionsItem>
    3230    procedure TabControlMouseLeave(Sender: TObject);
    33     procedure TabControlChange(Sender: TObject);
    3431    procedure TabControlMouseDown(Sender: TObject; Button: TMouseButton;
    3532      Shift: TShiftState; X, Y: Integer);
     
    3936      DropCtl: TControl); override;
    4037    procedure UpdateClientSize; override;
    41   private
    42     FTabsPos: THeaderPos;
    4338    function FindControlInPanels(Control: TControl): TCDManagerItem; override;
    44     procedure InsertControlNoUpdate(Control: TControl; InsertAt: TAlign);
    4539    procedure RemoveControl(Control: TControl); override;
     40    function GetHeaderPos: THeaderPos; override;
     41    procedure SetHeaderPos(const AValue: THeaderPos); override;
    4642  public
    47     constructor Create(ADockSite: TWinControl);
     43    TabImageList: TImageList;
     44    PageControl: TPageControl;
     45    procedure InsertControlNoUpdate(Control: TControl; InsertAt: TAlign); virtual;
     46    procedure TabControlChange(Sender: TObject); virtual;
     47    constructor Create(ADockSite: TWinControl); override;
    4848    destructor Destroy; override;
    4949    procedure PaintSite(DC: HDC); override;
     
    5151    procedure ChangeVisible(Control: TWinControl; Visible: Boolean); override;
    5252    procedure Switch(Index: Integer); override;
    53     procedure SetTabsPos(const AValue: THeaderPos);
    5453    procedure PopupMenuTabCloseClick(Sender: TObject);
    55     property TabsPos: THeaderPos read FTabsPos write SetTabsPos;
    5654    property DockItems: TObjectList read FDockItems write FDockItems;
    5755  end;
     
    9896begin
    9997  if MouseDown then
    100   if Assigned(PageControl.ActivePage) then begin
     98  if Assigned(PageControl.ActivePage) and not Locked then begin
    10199    //TCDManagerItem(DockItems[PageControl.TabIndex]).ClientAreaPanel.DockSite := False;
    102100    DragManager.DragStart(TCDManagerItem(DockItems[PageControl.TabIndex]).Control, False, 1);
     
    188186  TabImageList := TImageList.Create(ADockSite); //FDockSite);
    189187  with TabImageList do begin
    190     Name := DockSite.Name + 'ImageList';
     188    Name := GetUniqueName(DockSite.Name + 'ImageList');
    191189  end;
    192190  PageControl := TPageControl.Create(ADockSite); //FDockSite);
    193191  with PageControl do begin
    194192    Parent := ADockSite;
    195     Name := Self.DockSite.Name + 'TabControl';
     193    Name := GetUniqueName(Self.DockSite.Name + 'TabControl');
    196194    Visible := True;
    197195    //Align := alTop;
     
    216214  for I := 0 to ADockSite.DockClientCount - 1 do
    217215    InsertControlNoUpdate(ADockSite.DockClients[I], alNone);
    218   TabControlChange(Self);
     216  //TabControlChange(Self);
    219217  //TCDManagerTabs(Self).TabControlChange(Self);
    220218end;
     
    287285begin
    288286  inherited RemoveControl(Control);
     287end;
     288
     289function TCDManagerTabs.GetHeaderPos: THeaderPos;
     290begin
     291  Result := inherited;
     292end;
     293
     294procedure TCDManagerTabs.SetHeaderPos(const AValue: THeaderPos);
     295begin
     296  inherited SetHeaderPos(AValue);
     297  with PageControl do
     298  case AValue of
     299    hpAuto, hpTop: begin
     300      //Align := alTop;
     301      TabPosition := tpTop;
     302      Height := GrabberSize;
     303    end;
     304    hpLeft: begin
     305      //Align := alLeft;
     306      TabPosition := tpLeft;
     307      Width := GrabberSize;
     308    end;
     309    hpRight: begin
     310      //Align := alRight;
     311      TabPosition := tpRight;
     312      Width := GrabberSize;
     313    end;
     314    hpBottom: begin
     315      //Align := alBottom;
     316      TabPosition := tpBottom;
     317      Height := GrabberSize;
     318    end;
     319  end;
    289320end;
    290321
     
    376407end;
    377408
    378 procedure TCDManagerTabs.SetTabsPos(const AValue: THeaderPos);
    379 begin
    380   if FTabsPos = AValue then Exit;
    381   FTabsPos := AValue;
    382   with PageControl do
    383   case AValue of
    384     hpAuto, hpTop: begin
    385       Align := alTop;
    386       TabPosition := tpTop;
    387       Height := GrabberSize;
    388     end;
    389     hpLeft: begin
    390       Align := alLeft;
    391       TabPosition := tpLeft;
    392       Width := GrabberSize;
    393     end;
    394     hpRight: begin
    395       Align := alRight;
    396       TabPosition := tpRight;
    397       Width := GrabberSize;
    398     end;
    399     hpBottom: begin
    400       Align := alBottom;
    401       TabPosition := tpBottom;
    402       Height := GrabberSize;
    403     end;
    404   end;
    405 end;
    406 
    407 
    408409end.
    409410
  • Docking/CoolDocking/Managers/UCDManagerTabsPopup.pas

    r197 r198  
    66
    77uses
    8   Classes, Controls, SysUtils, ComCtrls, ExtCtrls, UCDCommon,
    9   UCDManagerTabs;
     8  Classes, Controls, SysUtils, ComCtrls, ExtCtrls, UCDCommon, UCDManager,
     9  UCDManagerTabs, Forms;
    1010
    1111type
     
    4040  { TCDManagerTabsPopupItem }
    4141
    42   TCDManagerTabsPopupItem = class
    43     constructor Create;
    44   end;
    45 
    46   { TCDStylePopupTabs }
    47 
    48   TCDStylePopupTabs = class(TCDManagerTabs)
     42  TCDManagerTabsPopupItem = class(TCDManagerTabsItem)
     43    Hidden: Boolean;
     44    constructor Create; override;
     45  end;
     46
     47  { TCDManagerTabsPopup }
     48
     49  TCDManagerTabsPopup = class(TCDManagerTabs)
     50  private
     51    procedure InsertControlNoUpdate(Control: TControl; InsertAt: TAlign); override;
    4952  public
    5053    AutoHideEnabled: Boolean;
    5154    AutoHide: TCDAutoHide;
    5255    PopupPanel: TPanel;
    53     constructor Create(ADockSite: TWinControl);
     56    procedure SetHeaderPos(const AValue: THeaderPos); override;
     57    procedure PinShowButtonClick(Sender: TObject);
     58    procedure PinHideButtonClick(Sender: TObject);
     59    procedure TabControlChange(Sender: TObject); override;
     60    constructor Create(ADockSite: TWinControl); override;
    5461    destructor Destroy; override;
    55   private
    5662  end;
    5763
     
    6066
    6167uses
    62   UCDClient;
     68  UCDClient, UCDManagerRegions;
    6369
    6470{ TCDManagerTabsPopupItem }
     
    6672constructor TCDManagerTabsPopupItem.Create;
    6773begin
     74  inherited;
    6875end;
    6976
     
    121128begin
    122129  StartBounds := Control.BoundsRect;
     130  Control.Show;
    123131  Control.Align := alCustom;
    124132  Direction := 1;
     
    165173end;
    166174
    167 { TCDStylePopupTabs }
    168 
    169 
    170 constructor TCDStylePopupTabs.Create(ADockSite: TWinControl);
     175{ TCDManagerTabsPopup }
     176
     177procedure TCDManagerTabsPopup.PinShowButtonClick(Sender: TObject);
     178begin
     179
     180end;
     181
     182procedure TCDManagerTabsPopup.PinHideButtonClick(Sender: TObject);
     183begin
     184
     185end;
     186
     187procedure TCDManagerTabsPopup.TabControlChange(Sender: TObject);
     188begin
     189  inherited TabControlChange(Sender);
     190  if PopupPanel.ControlCount > 0 then
     191    PopupPanel.Controls[0].Parent := nil;
     192  AutoHide.Hide;
     193  if PageControl.TabIndex >= 0 then begin
     194    TCDManagerTabsPopupItem(DockItems[PageControl.TabIndex]).Control.Parent := PopupPanel;
     195    AutoHide.Control.Align := alCustom;
     196    with AutoHide.Control do
     197    case AutoHide.TabPosition of
     198      tpTop: SetBounds(PageControl.Left, PageControl.Top + PageControl.Height,
     199        PageControl.Width, Height);
     200      tpLeft: SetBounds(PageControl.Left + PageControl.Width, PageControl.Top,
     201        Width, PageControl.Height);
     202      tpBottom: SetBounds(PageControl.Left, PageControl.Top - Height,
     203        PageControl.Width, Height);
     204      tpRight: SetBounds(PageControl.Left - Width, PageControl.Top,
     205        Width, PageControl.Height);
     206    end;
     207    AutoHide.Show;
     208  end;
     209end;
     210
     211constructor TCDManagerTabsPopup.Create(ADockSite: TWinControl);
    171212var
    172213  I: Integer;
     
    174215  inherited;
    175216  FDockStyle := dsPopupTabs;
     217  PopupPanel := TPanel.Create(nil);
     218  PopupPanel.DockManager := TCDManagerRegions.Create(PopupPanel);
     219  PopupPanel.Visible := True;
    176220  AutoHide := TCDAutoHide.Create;
    177   PopupPanel := TPanel.Create(nil);
    178 end;
    179 
    180 destructor TCDStylePopupTabs.Destroy;
     221  AutoHide.Control := PopupPanel;
     222
     223  for I := 0 to DockItems.Count - 1 do begin
     224//    if TCDManagerTabsPopupItem(DockItems[I]).Hidden then
     225//      if
     226  end;
     227end;
     228
     229destructor TCDManagerTabsPopup.Destroy;
    181230begin
    182231  AutoHide.Free;
     
    185234end;
    186235
     236procedure TCDManagerTabsPopup.InsertControlNoUpdate(Control: TControl; InsertAt: TAlign);
     237var
     238  NewTabSheet: TTabSheet;
     239  NewItem: TCDManagerTabsItem;
     240begin
     241  //inherited;
     242  begin
     243    NewItem := TCDManagerTabsPopupItem.Create;
     244    with NewItem do begin
     245      //Panel.Parent := Self.DockSite;
     246      Manager := Self;
     247      //if DockStyle = dsList then Visible := True;
     248      //Align := alClient;
     249      //Header.PopupMenu := Self.PopupMenu;
     250      //PopupMenu.Parent := Self.DockSite;
     251    end;
     252    if (Control is TForm) and Assigned((Control as TForm).Icon) then
     253      NewItem.Icon.Picture.Assign((Control as TForm).Icon);
     254
     255    NewItem.Control := Control;
     256    Control.AddHandlerOnVisibleChanged(NewItem.VisibleChange);
     257    //AControl.Parent := NewItem.ClientAreaPanel;
     258    Control.Align := alClient;
     259    if (InsertAt = alTop) or (InsertAt = alLeft) then
     260      DockItems.Insert(0, NewItem)
     261      else DockItems.Add(NewItem);
     262
     263  end;
     264
     265    NewTabSheet := TTabSheet.Create(PageControl);
     266    NewTabSheet.PageControl := PageControl;
     267    NewTabSheet.Caption := Control.Caption;
     268    NewTabSheet.ImageIndex := TabImageList.Count;
     269    NewTabSheet.TabVisible := Control.Visible;
     270    Control.Parent := NewTabSheet;
     271    TabImageList.Add(NewItem.Icon.Picture.Bitmap, nil);
     272//    if Assigned(NewItem.Splitter) then
     273//      NewItem.Splitter.Visible := False;
     274//    NewItem.ClientAreaPanel.Visible := False;
     275//    NewItem.Visible := False;
     276    //NewItem.Parent := NewTabSheet;
     277end;
     278
     279procedure TCDManagerTabsPopup.SetHeaderPos(const AValue: THeaderPos);
     280begin
     281  inherited SetHeaderPos(AValue);
     282  AutoHide.TabPosition := HeaderPosToTabPos(AValue);
     283end;
     284
    187285end.
    188286
Note: See TracChangeset for help on using the changeset viewer.