Changeset 194 for Docking/CoolDocking/Managers
- Timestamp:
- Mar 11, 2011, 1:00:06 PM (14 years ago)
- Location:
- Docking/CoolDocking/Managers
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Docking/CoolDocking/Managers/UCDManagerRegions.pas
r193 r194 7 7 uses 8 8 Classes, SysUtils, Controls, ExtCtrls, StdCtrls, Forms, 9 Graphics, Contnrs, Buttons, UCDClientPanel, UCDCommon, UCDManager; 9 Graphics, Contnrs, Buttons, UCDCommon, UCDManager, 10 LCLType, LMessages; 10 11 11 12 type 12 TCDStyleRegionsPanel = class(TPanel) 13 13 14 { TCDManagerRegionsItem } 15 16 TCDManagerRegionsItem = class(TCDManagerItem) 17 Panel: TPanel; 18 Splitter: TSplitter; 19 ClientAreaPanel: TPanel; 20 constructor Create; 14 21 end; 15 22 … … 18 25 TCDManagerRegions = class(TCDManager) 19 26 private 27 FDockItems: TObjectList; // TList<TCDManagerRegionsItem> 20 28 function GetDirection(InsertAt: TAlign): TCDDirection; 21 29 public 22 30 FDockDirection: TCDDirection; 23 31 //Panels: TObjectList; // TObjectList<TCDStyleRegionsPanel> 32 function FindControlInPanels(Control: TControl): TCDManagerItem; override; 24 33 procedure InsertControlPanel(Control: TControl; InsertAt: TAlign; 25 34 DropCtl: TControl); override; … … 27 36 constructor Create(ADockSite: TWinControl); 28 37 destructor Destroy; override; 38 procedure PaintSite(DC: HDC); override; 29 39 procedure UpdateClientSize; override; 30 40 procedure DoSetVisible(const AValue: Boolean); override; … … 32 42 property DockDirection: TCDDirection read FDockDirection 33 43 write FDockDirection; 44 property DockItems: TObjectList read FDockItems write FDockItems; 34 45 end; 35 46 … … 38 49 uses 39 50 UCDClient, UCDConjoinForm; 51 52 { TCDManagerRegionsItem } 53 54 constructor TCDManagerRegionsItem.Create; 55 begin 56 Panel := TPanel.Create(nil); 57 58 ClientAreaPanel := TPanel.Create(Panel); 59 with ClientAreaPanel do begin 60 Parent := Panel; 61 Visible := True; 62 DockSite := True; 63 UseDockManager := True; 64 Align := alClient; 65 BevelInner := bvNone; 66 BevelOuter := bvNone; 67 //Color := clGreen; 68 end; 69 Splitter := TSplitter.Create(Panel); 70 with Splitter do begin 71 Parent := Panel; 72 //Color := clRed; 73 end; 74 end; 40 75 41 76 … … 53 88 end; 54 89 90 function TCDManagerRegions.FindControlInPanels(Control: TControl 91 ): TCDManagerItem; 92 var 93 I: Integer; 94 begin 95 I := 0; 96 while (I < FDockItems.Count) and 97 (TCDManagerItem(FDockItems[I]).Control <> Control) do Inc(I); 98 if I < FDockItems.Count then Result := TCDManagerItem(FDockItems[I]) 99 else Result := nil; 100 end; 101 55 102 procedure TCDManagerRegions.InsertControlPanel(Control: TControl; InsertAt: TAlign; 56 103 DropCtl: TControl); 57 104 var 58 NewPanel: TCD ClientPanel;105 NewPanel: TCDManagerRegionsItem; 59 106 I: Integer; 60 107 NewDirection: TCDDirection; … … 85 132 end; 86 133 87 NewPanel := TCD ClientPanel.Create(nil);134 NewPanel := TCDManagerRegionsItem.Create; 88 135 with NewPanel do begin 89 Pa rent := Self.DockSite;90 OwnerDockManager := Self;136 Panel.Parent := Self.DockSite; 137 Manager := Self; 91 138 if DockStyle = dsList then Visible := True; 92 139 Header.PopupMenu := Self.PopupMenu; … … 101 148 Control.Align := alClient; 102 149 if (InsertAt = alTop) or (InsertAt = alLeft) then 103 Dock Panels.Insert(0, NewPanel)104 else Dock Panels.Add(NewPanel);150 DockItems.Insert(0, NewPanel) 151 else DockItems.Add(NewPanel); 105 152 end; 106 153 UpdateClientSize; … … 109 156 procedure TCDManagerRegions.RemoveControl(Control: TControl); 110 157 var 111 ClientPanel: TCD ClientPanel;158 ClientPanel: TCDManagerItem; 112 159 ClientCount: Integer; 113 160 begin … … 115 162 Control.RemoveHandlerOnVisibleChanged(ClientPanel.VisibleChange); 116 163 117 Dock Panels.Remove(ClientPanel);118 ClientCount := Dock Panels.Count;164 DockItems.Remove(ClientPanel); 165 ClientCount := DockItems.Count; 119 166 120 167 //if TCDManager(Manager).DockSite.DockClientCount = 2 then FDockDirection := ddNone; … … 124 171 with TCDConjoinForm(Self.DockSite) do begin 125 172 if Assigned(Parent) then begin 126 TCD ClientPanel(DockPanels[0]).Control.ManualDock(HostDockSite);127 end else TCD ClientPanel(DockPanels[0]).Control.ManualFloat(Rect(Left, Top, Left + Width, Top + Height));173 TCDManagerItem(DockItems[0]).Control.ManualDock(HostDockSite); 174 end else TCDManagerItem(DockItems[0]).Control.ManualFloat(Rect(Left, Top, Left + Width, Top + Height)); 128 175 ManualFloat(Rect(Left, Top, Left + Width, Top + Height)); 129 176 Free; … … 140 187 inherited; 141 188 FDockStyle := dsList; 142 //Panels := TObjectList.Create; 143 144 for I := 0 to DockPanels.Count - 1 do begin 145 if Assigned(TCDClientPanel(DockPanels[I]).Splitter) then 146 TCDClientPanel(DockPanels[I]).Splitter.Visible := True; 147 TCDClientPanel(DockPanels[I]).Visible := True; 148 TCDClientPanel(DockPanels[I]).ClientAreaPanel.Parent := TCDClientPanel(DockPanels[I]); 149 TCDClientPanel(DockPanels[I]).ClientAreaPanel.Visible := True; 150 TCDClientPanel(DockPanels[I]).Control.Visible := True; 189 FDockItems := TObjectList.Create; 190 191 for I := 0 to DockItems.Count - 1 do begin 192 if Assigned(TCDManagerRegionsItem(DockItems[I]).Splitter) then 193 with TCDManagerRegionsItem(DockItems[I]) do begin 194 Splitter.Visible := True; 195 Panel.Visible := True; 196 ClientAreaPanel.Parent := TCDManagerRegionsItem(DockItems[I]).Panel; 197 ClientAreaPanel.Visible := True; 198 Control.Visible := True; 199 end; 151 200 end; 152 201 end; … … 154 203 destructor TCDManagerRegions.Destroy; 155 204 begin 156 //Panels.Free;205 FDockItems.Free; 157 206 inherited Destroy; 207 end; 208 209 procedure TCDManagerRegions.PaintSite(DC: HDC); 210 var 211 I: Integer; 212 begin 213 inherited PaintSite(DC); 214 for I := 0 to FDockItems.Count - 1 do 215 with TCDManagerRegionsItem(FDockItems[I]) do begin 216 Panel.Invalidate; 217 end; 158 218 end; 159 219 … … 171 231 SplitterLeft := 0; 172 232 SplitterTop := 0; 173 for I := 0 to Dock Panels.Count - 1 do174 with TCD ClientPanel(DockPanels[I]) do begin175 Left := SplitterLeft;176 Top := SplitterTop;177 Height := Self.DockSite.Height div233 for I := 0 to DockItems.Count - 1 do 234 with TCDManagerRegionsItem(DockItems[I]) do begin 235 Panel.Left := SplitterLeft; 236 Panel.Top := SplitterTop; 237 Panel.Height := Self.DockSite.Height div 178 238 Self.DockSite.DockClientCount; 179 Width := Self.DockSite.Width div180 S Elf.DockSite.DockClientCount;239 Panel.Width := Self.DockSite.Width div 240 Self.DockSite.DockClientCount; 181 241 //TCDClientPanel(FDockPanels[I]).DockPanelPaint(Self); 182 if I < (Dock Panels.Count - 1) thenAlign := BaseAlign183 else Align := alClient;184 185 Inc(SplitterLeft, Width);186 Inc(SplitterTop, Height);242 if I < (DockItems.Count - 1) then Panel.Align := BaseAlign 243 else Panel.Align := alClient; 244 245 Inc(SplitterLeft, Panel.Width); 246 Inc(SplitterTop, Panel.Height); 187 247 Splitter.Left := SplitterLeft; 188 248 Splitter.Top := SplitterTop; 189 Splitter.Parent := S Elf.DockSite;249 Splitter.Parent := Self.DockSite; 190 250 Splitter.Align := BaseAlign; 191 Splitter.Visible := I < (Dock Panels.Count - 1);251 Splitter.Visible := I < (DockItems.Count - 1); 192 252 Inc(SplitterLeft, Splitter.Width); 193 253 Inc(SplitterTop, Splitter.Height); 194 254 195 DockPanelPaint(Self);196 if I < (Dock Panels.Count - 1) then begin197 if DockDirection = ddHorizontal then Align := alLeft198 else Align := alTop;199 end else Align := alClient;255 Paint(Self); 256 if I < (DockItems.Count - 1) then begin 257 if DockDirection = ddHorizontal then Panel.Align := alLeft 258 else Panel.Align := alTop; 259 end else Panel.Align := alClient; 200 260 end; 201 261 end; … … 206 266 begin 207 267 inherited; 208 for I := 0 to Dock Panels.Count - 1 do268 for I := 0 to DockItems.Count - 1 do 209 269 210 270 //Show; 211 271 //ShowMessage(IntToStr(Control.Tag)); 212 with TCD ClientPanel(DockPanels[I]) do begin272 with TCDManagerRegionsItem(DockItems[I]) do begin 213 273 if AValue and (not Control.Visible) and (Control.Tag = Integer(dhtTemporal)) then begin 214 274 Control.Show; -
Docking/CoolDocking/Managers/UCDManagerRegionsPopup.pas
r193 r194 10 10 type 11 11 12 { TCD StylePopupRegions}12 { TCDManagerPopupRegionsItem } 13 13 14 TCDStylePopupRegions = class(TCDManagerRegions) 14 TCDManagerPopupRegionsItem = class(TCDManagerRegionsItem) 15 private 16 FAutoHide: Boolean; 17 function GetAutoHideEnabled: Boolean; 18 procedure SetAutoHide(const AValue: Boolean); 19 procedure SetAutoHideEnabled(const AValue: Boolean); 20 public 21 property AutoHideEnabled: Boolean read GetAutoHideEnabled 22 write SetAutoHideEnabled; 23 end; 24 25 { TCDManagerPopupRegions } 26 27 TCDManagerPopupRegions = class(TCDManagerRegions) 15 28 constructor Create(ADockSite: TWinControl); 16 29 end; … … 22 35 UCDClient; 23 36 24 { TCD StylePopupRegions}37 { TCDManagerPopupRegionsItem } 25 38 26 constructor TCDStylePopupRegions.Create(ADockSite: TWinControl); 39 function TCDManagerPopupRegionsItem.GetAutoHideEnabled: Boolean; 40 begin 41 42 end; 43 44 procedure TCDManagerPopupRegionsItem.SetAutoHide(const AValue: Boolean); 45 begin 46 47 end; 48 49 procedure TCDManagerPopupRegionsItem.SetAutoHideEnabled(const AValue: Boolean); 50 begin 51 52 end; 53 54 { TCDManagerPopupRegions } 55 56 constructor TCDManagerPopupRegions.Create(ADockSite: TWinControl); 27 57 begin 28 58 inherited; -
Docking/CoolDocking/Managers/UCDManagerTabs.pas
r193 r194 6 6 7 7 uses 8 Classes, Controls, ExtCtrls, ComCtrls, SysUtils, Dialogs, 9 Menus, Forms, UCDClientPanel, UCDCommon, UCDManager; 8 Classes, Controls, ExtCtrls, ComCtrls, SysUtils, Dialogs, Contnrs, 9 Menus, Forms, UCDCommon, UCDManager, 10 LCLType, LMessages, Graphics; 10 11 11 12 type 13 TCDManagerTabsITem = class(TCDManagerItem) 14 15 end; 12 16 13 17 { TCDManagerTabs } … … 20 24 PageControl: TPageControl; 21 25 TabImageList: TImageList; 26 FDockItems: TObjectList; // TList<TCDManagerRegionsItem> 22 27 procedure TabControlMouseLeave(Sender: TObject); 23 28 procedure TabControlChange(Sender: TObject); … … 31 36 private 32 37 FTabsPos: THeaderPos; 38 function FindControlInPanels(Control: TControl): TCDManagerItem; override; 33 39 procedure InsertControlNoUpdate(AControl: TControl; InsertAt: TAlign); 34 40 procedure RemoveControl(Control: TControl); override; 35 41 public 36 42 constructor Create(ADockSite: TWinControl); 43 destructor Destroy; override; 44 procedure PaintSite(DC: HDC); override; 37 45 procedure DoSetVisible(const AValue: Boolean); override; 38 destructor Destroy; override;39 46 procedure ChangeVisible(Control: TWinControl; Visible: Boolean); override; 40 47 procedure Switch(Index: Integer); override; … … 42 49 procedure PopupMenuTabCloseClick(Sender: TObject); 43 50 property TabsPos: THeaderPos read FTabsPos write SetTabsPos; 51 property DockItems: TObjectList read FDockItems write FDockItems; 44 52 end; 45 53 … … 51 59 { TCDManagerTabs } 52 60 61 function TCDManagerTabs.FindControlInPanels(Control: TControl 62 ): TCDManagerItem; 63 var 64 I: Integer; 65 begin 66 I := 0; 67 while (I < FDockItems.Count) and 68 (TCDManagerItem(FDockItems[I]).Control <> Control) do Inc(I); 69 if I < FDockItems.Count then Result := TCDManagerItem(FDockItems[I]) 70 else Result := nil; 71 end; 72 53 73 procedure TCDManagerTabs.PopupMenuTabCloseClick(Sender: TObject); 54 74 begin 55 75 if Assigned(PageControl.ActivePage) then 56 TCD ClientPanel(DockPanels[PageControl.TabIndex]).Control.Hide;76 TCDManagerItem(DockItems[PageControl.TabIndex]).Control.Hide; 57 77 end; 58 78 … … 61 81 if MouseDown then 62 82 if Assigned(PageControl.ActivePage) then begin 63 TCDClientPanel(DockPanels[PageControl.TabIndex]).ClientAreaPanel.DockSite := False;64 DragManager.DragStart(TCD ClientPanel(DockPanels[PageControl.TabIndex]).Control, False, 1);83 //TCDManagerItem(DockItems[PageControl.TabIndex]).ClientAreaPanel.DockSite := False; 84 DragManager.DragStart(TCDManagerItem(DockItems[PageControl.TabIndex]).Control, False, 1); 65 85 end; 66 86 MouseDown := False; … … 72 92 begin 73 93 // Hide all clients 74 for I := 0 to Dock Panels.Count - 1 do75 if TCD ClientPanel(DockPanels[I]).Control.Visible94 for I := 0 to DockItems.Count - 1 do 95 if TCDManagerItem(DockItems[I]).Control.Visible 76 96 //and (PageControl.TabIndex <> I) 77 97 then 78 98 begin 79 TCD ClientPanel(DockPanels[I]).Control.Tag := Integer(dhtTemporal);80 TCD ClientPanel(DockPanels[I]).Control.Hide;81 TCDClientPanel(DockPanels[I]).ClientAreaPanel.Hide;82 TCDClientPanel(DockPanels[I]).ClientAreaPanel.Parent := PageControl.Pages[I];99 TCDManagerItem(DockItems[I]).Control.Tag := Integer(dhtTemporal); 100 TCDManagerItem(DockItems[I]).Control.Hide; 101 //TCDClientPanel(DockItems[I]).ClientAreaPanel.Hide; 102 //TCDClientPanel(DockItems[I]).ClientAreaPanel.Parent := PageControl.Pages[I]; 83 103 //TCDClientPanel(DockPanels[I]).ClientAreaPanel.Parent := DockSite; 84 TCD ClientPanel(DockPanels[I]).Control.Align := alClient;104 TCDManagerItem(DockItems[I]).Control.Align := alClient; 85 105 //TCDClientPanel(DockPanels[I]).Control.Parent := 86 106 // TCDClientPanel(DockPanels[I]).ClientAreaPanel; 87 107 //ShowMessage(TCDClientPanel(DockPanels[I]).Control.ClassName); 88 Application.ProcessMessages;108 //Application.ProcessMessages; 89 109 90 110 // Workaround for "Cannot focus" error 91 TForm(TCD ClientPanel(DockPanels[I]).Control).ActiveControl := nil;111 TForm(TCDManagerItem(DockItems[I]).Control).ActiveControl := nil; 92 112 end; 93 113 94 114 // Show selected 95 if (PageControl.TabIndex <> -1) and (Dock Panels.Count > PageControl.TabIndex)115 if (PageControl.TabIndex <> -1) and (DockItems.Count > PageControl.TabIndex) 96 116 // and not TCDClientPanel(DockPanels[PageControl.TabIndex]).Control.Visible 97 117 then begin 98 with TCD ClientPanel(DockPanels[PageControl.TabIndex]), ClientAreaPaneldo begin118 with TCDManagerItem(DockItems[PageControl.TabIndex]) do begin 99 119 Control.Show; 100 120 (*AutoHide.Enable := True; … … 145 165 inherited; 146 166 FDockStyle := dsTabs; 167 FDockItems := TObjectList.Create; 168 147 169 TabImageList := TImageList.Create(ADockSite); //FDockSite); 148 170 with TabImageList do begin … … 173 195 PageControl.Visible := True; 174 196 //TabImageList.Clear; 175 for I := 0 to Dock Panels.Count - 1 do176 Self.InsertControlNoUpdate(TCD ClientPanel(DockPanels[I]).Control, alNone);197 for I := 0 to DockItems.Count - 1 do 198 Self.InsertControlNoUpdate(TCDManagerItem(DockItems[I]).Control, alNone); 177 199 TabControlChange(Self); 178 200 end; … … 180 202 destructor TCDManagerTabs.Destroy; 181 203 begin 204 FDockItems.Free; 182 205 PageControl.Free; 183 206 TabImageList.Free; … … 185 208 end; 186 209 210 procedure TCDManagerTabs.PaintSite(DC: HDC); 211 var 212 I: Integer; 213 begin 214 inherited PaintSite(DC); 215 PageControl.Invalidate; 216 end; 217 187 218 procedure TCDManagerTabs.Switch(Index: Integer); 188 219 begin … … 193 224 var 194 225 NewTabSheet: TTabSheet; 195 NewPanel: TCD ClientPanel;226 NewPanel: TCDManagerTabsItem; 196 227 begin 197 228 inherited; 198 229 begin 199 NewPanel := TCD ClientPanel.Create(nil);230 NewPanel := TCDManagerTabsItem.Create; 200 231 with NewPanel do begin 201 Parent := Self.DockSite;202 OwnerDockManager := Self;232 //Panel.Parent := Self.DockSite; 233 Manager := Self; 203 234 if DockStyle = dsList then Visible := True; 204 Align := alClient;235 //Align := alClient; 205 236 Header.PopupMenu := Self.PopupMenu; 206 237 //PopupMenu.Parent := Self.DockSite; … … 211 242 NewPanel.Control := AControl; 212 243 AControl.AddHandlerOnVisibleChanged(NewPanel.VisibleChange); 213 AControl.Parent := NewPanel.ClientAreaPanel;244 //AControl.Parent := NewPanel.ClientAreaPanel; 214 245 AControl.Align := alClient; 215 246 if (InsertAt = alTop) or (InsertAt = alLeft) then 216 Dock Panels.Insert(0, NewPanel)217 else Dock Panels.Add(NewPanel);247 DockItems.Insert(0, NewPanel) 248 else DockItems.Add(NewPanel); 218 249 219 250 end; … … 225 256 NewTabSheet.ImageIndex := TabImageList.Count; 226 257 TabImageList.Add(NewPanel.Header.Icon.Picture.Bitmap, nil); 227 if Assigned(NewPanel.Splitter) then228 NewPanel.Splitter.Visible := False;229 NewPanel.ClientAreaPanel.Visible := False;230 NewPanel.Visible := False;258 // if Assigned(NewPanel.Splitter) then 259 // NewPanel.Splitter.Visible := False; 260 // NewPanel.ClientAreaPanel.Visible := False; 261 // NewPanel.Visible := False; 231 262 //NewPanel.Parent := NewTabSheet; 232 263 end; … … 253 284 begin 254 285 inherited UpdateClientSize; 255 for I := 0 to Dock Panels.Count - 1 do begin286 for I := 0 to DockItems.Count - 1 do begin 256 287 //TCDClientPanel(DockPanels[I]).ClientAreaPanel.Width := DockSite.Width; 257 288 //TCDClientPanel(DockPanels[I]).ClientAreaPanel.Height := DockSite.Height - PageControl.Height; … … 263 294 begin 264 295 inherited; 265 if (PageControl.TabIndex >= 0) and (PageControl.TabIndex < Dock Panels.Count) then266 with TCD ClientPanel(DockPanels[PageControl.TabIndex]) do begin296 if (PageControl.TabIndex >= 0) and (PageControl.TabIndex < DockItems.Count) then 297 with TCDManagerItem(DockItems[PageControl.TabIndex]) do begin 267 298 //Show; 268 299 //ShowMessage(IntToStr(Control.Tag)); … … 294 325 //TabImageList.Delete(PageControl.Tabs.IndexOf(Control.Caption)); 295 326 296 I := Dock Panels.IndexOf(FindControlInPanels(Control));327 I := DockItems.IndexOf(FindControlInPanels(Control)); 297 328 if Control.Tag = Integer(dhtPermanent) then 298 329 if I <> -1 then … … 308 339 begin 309 340 // if Control.Tag = 0 then begin 310 I := Dock Panels.IndexOf(FindControlInPanels(Control));341 I := DockItems.IndexOf(FindControlInPanels(Control)); 311 342 //if then 312 343 if I <> -1 then -
Docking/CoolDocking/Managers/UCDManagerTabsPopup.pas
r193 r194 7 7 uses 8 8 Classes, Controls, SysUtils, ComCtrls, ExtCtrls, UCDCommon, 9 UCDManagerTabs , UCDClientPanel;9 UCDManagerTabs; 10 10 11 11 type … … 38 38 end; 39 39 40 { TCDManagerTabsPopupItem } 41 42 TCDManagerTabsPopupItem = class 43 constructor Create; 44 end; 45 40 46 { TCDStylePopupTabs } 41 47 42 48 TCDStylePopupTabs = class(TCDManagerTabs) 49 public 43 50 TabControl: TTabControl; 44 51 TabImageList: TImageList; 52 AutoHideEnabled: Boolean; 45 53 AutoHide: TCDAutoHide; 46 54 procedure TabControlMouseLeave(Sender: TObject); … … 61 69 UCDClient; 62 70 71 { TCDManagerTabsPopupItem } 72 73 constructor TCDManagerTabsPopupItem.Create; 74 begin 75 end; 76 63 77 { TCDAutoHide } 64 78
Note:
See TracChangeset
for help on using the changeset viewer.