From: Remko B. <rem...@us...> - 2005-05-14 23:01:44
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31787 Modified Files: JvDockControlForm.pas JvDockVSNetStyle.pas Log Message: Mantis 0002934: ShowDockForm function ignores JvDockServer.AutoFocusDockedForm Index: JvDockControlForm.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvDockControlForm.pas,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** JvDockControlForm.pas 5 May 2005 15:49:00 -0000 1.70 --- JvDockControlForm.pas 14 May 2005 23:01:34 -0000 1.71 *************** *** 337,340 **** --- 337,343 ---- procedure ResetDockControlTabOption; + procedure DoShowDockForm(DockWindow: TWinControl); virtual; + procedure DoHideDockForm(DockWindow: TWinControl); virtual; + procedure ShowDockForm(ADockClient: TJvDockClient); virtual; procedure HideDockForm(ADockClient: TJvDockClient); virtual; *************** *** 1193,1197 **** J: Integer; ADockServer: TJvDockServer; ! ARect: TRect; Channel: TJvDockVSChannel; begin --- 1196,1200 ---- J: Integer; ADockServer: TJvDockServer; ! // ARect: TRect; Channel: TJvDockVSChannel; begin *************** *** 1234,1240 **** (DockForm.HostDockSite.DockClientCount <= 2) then PostMessage(DockForm.HostDockSite.Parent.Handle, WM_CLOSE, 0, 0); ! end ! else ! ARect := DockForm.BoundsRect; Channel := RetrieveChannel(DockForm.HostDockSite); --- 1237,1243 ---- (DockForm.HostDockSite.DockClientCount <= 2) then PostMessage(DockForm.HostDockSite.Parent.Handle, WM_CLOSE, 0, 0); ! end; ! // else ! // ARect := DockForm.BoundsRect; Channel := RetrieveChannel(DockForm.HostDockSite); *************** *** 1323,1327 **** procedure HideDockForm(DockWindow: TWinControl); var ! TmpDockWindow: TWinControl; procedure HideDockChild(DockWindow: TWinControl); --- 1326,1338 ---- procedure HideDockForm(DockWindow: TWinControl); var ! ADockClient: TJvDockClient; ! begin ! // delegate to style ! ADockClient := FindDockClient(DockWindow); ! if Assigned(ADockClient) and Assigned(ADockClient.DockStyle) then ! ADockClient.DockStyle.DoHideDockForm(DockWindow); ! end; ! ! procedure TJvDockBasicStyle.DoHideDockForm(DockWindow: TWinControl); procedure HideDockChild(DockWindow: TWinControl); *************** *** 1349,1355 **** if (DockWindow <> nil) and (DockWindow.HostDockSite <> nil) then begin - // work-around - if Assigned(RetrieveChannel(DockWindow.HostDockSite)) then Exit; - Host := DockWindow.HostDockSite; if Host.VisibleDockClientCount = 0 then --- 1360,1363 ---- *************** *** 1369,1388 **** end; - procedure HidePopupPanel(Client: TWinControl); - var - Channel: TJvDockVSChannel; - begin - Channel := RetrieveChannel(Client.HostDockSite); - if Assigned(Channel) then - Channel.HidePopupPanel(Client); - end; - begin - TmpDockWindow := TWinControl(DockWindow); HideDockChild(DockWindow); HideDockParent(DockWindow); if (DockWindow.HostDockSite is TJvDockCustomControl) then TJvDockCustomControl(DockWindow.HostDockSite).UpdateCaption(DockWindow); - HidePopupPanel(TmpDockWindow); end; --- 1377,1385 ---- *************** *** 1951,1959 **** procedure ShowDockForm(DockWindow: TWinControl); var ! TmpDockWindow: TWinControl; procedure ShowClient(Client, DockParent: TWinControl); var ADockClient: TJvDockClient; I: Integer; begin --- 1948,1965 ---- procedure ShowDockForm(DockWindow: TWinControl); var ! ADockClient: TJvDockClient; ! begin ! // delegate to style ! ADockClient := FindDockClient(DockWindow); ! if Assigned(ADockClient) and Assigned(ADockClient.DockStyle) then ! ADockClient.DockStyle.DoShowDockForm(DockWindow); ! end; ! ! procedure TJvDockBasicStyle.DoShowDockForm(DockWindow: TWinControl); procedure ShowClient(Client, DockParent: TWinControl); var ADockClient: TJvDockClient; + ADockServer: TJvDockServer; I: Integer; begin *************** *** 1973,1977 **** begin ADockClient.DockStyle.ShowDockForm(ADockClient); ! if DockParent.CanFocus then DockParent.SetFocus; end; --- 1979,1985 ---- begin ADockClient.DockStyle.ShowDockForm(ADockClient); ! ADockServer := FindDockServer(GetParentForm(DockParent)); ! if (not Assigned(ADockServer) or ADockServer.AutoFocusDockedForm) and ! DockParent.CanFocus then DockParent.SetFocus; end; *************** *** 2040,2054 **** end; - procedure ShowPopupPanel(Client: TWinControl); - var - Channel: TJvDockVSChannel; - begin - Channel := RetrieveChannel(Client.HostDockSite); - if Assigned(Channel) then - Channel.PopupDockForm(Client); - end; - begin - TmpDockWindow := DockWindow; repeat { Show single floating window } --- 2048,2052 ---- *************** *** 2060,2064 **** DockWindow := ShowDockPanel(DockWindow); until (DockWindow = nil) or (DockWindow.Parent = nil); - ShowPopupPanel(TmpDockWindow); end; --- 2058,2061 ---- *************** *** 4632,4636 **** if not Client.Visible then Client.Show; ! if (not TWinControl(Client).Focused) and (TWinControl(Client).CanFocus) then TWinControl(Client).SetFocus; end; --- 4629,4635 ---- if not Client.Visible then Client.Show; ! ! if DockServer.AutoFocusDockedForm and (Client is TWinControl) and ! not TWinControl(Client).Focused and TWinControl(Client).CanFocus then TWinControl(Client).SetFocus; end; Index: JvDockVSNetStyle.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvDockVSNetStyle.pas,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** JvDockVSNetStyle.pas 24 Apr 2005 21:11:58 -0000 1.58 --- JvDockVSNetStyle.pas 14 May 2005 23:01:34 -0000 1.59 *************** *** 216,219 **** --- 216,220 ---- var PaneIndex: Integer): Boolean; function FindPane(Control: TWinControl): TJvDockVSPane; + procedure AutoFocusActiveDockForm; { Slides the window into view } procedure PopupDockForm(Pane: TJvDockVSPane); overload; *************** *** 273,276 **** --- 274,280 ---- function GetControlName: string; override; {$ENDIF !USEJVCL} + procedure DoUnAutoHideDockForm(DockWindow: TWinControl); virtual; + procedure DoShowDockForm(DockWindow: TWinControl); override; + procedure DoHideDockForm(DockWindow: TWinControl); override; procedure SetDockFormVisible(ADockClient: TJvDockClient; AVisible: Boolean); procedure ShowDockForm(ADockClient: TJvDockClient); override; *************** *** 688,801 **** procedure UnAutoHideDockForm(ADockWindow: TWinControl); var ! TmpDockWindow: TWinControl; ! ! procedure ShowClient(Client, DockParent: TWinControl); ! var ! ADockClient: TJvDockClient; ! I: Integer; ! begin ! if (DockParent is TJvDockableForm) and (Client <> nil) then ! begin ! with TJvDockableForm(DockParent).DockableControl do ! for I := 0 to DockClientCount - 1 do ! if DockClients[I] <> Client then ! MakeDockClientEvent(DockClients[I], True); ! if Client.HostDockSite is TJvDockCustomControl then ! TJvDockCustomControl(Client.HostDockSite).UpdateCaption(nil); ! end ! else ! begin ! ADockClient := FindDockClient(DockParent); ! if (ADockClient <> nil) and (ADockClient.DockStyle <> nil) then ! begin ! ADockClient.DockStyle.ShowDockForm(ADockClient); ! if DockParent.CanFocus then ! DockParent.SetFocus; ! end; ! end; ! if DockParent.Parent = nil then ! SetForegroundWindow(DockParent.Handle); ! end; ! ! function ShowDockPanel(Client: TWinControl): TWinControl; ! begin ! Result := Client; ! if Assigned(Client) and (Client.HostDockSite is TJvDockPanel) then ! begin ! ShowClient(nil, Client); ! TJvDockPanel(Client.HostDockSite).ShowDockPanel(True, Client, sdfDockPanel); ! Result := nil; ! end; ! end; ! ! function ShowTabDockHost(Client: TWinControl): TWinControl; ! var ! I: Integer; ! begin ! Result := Client; ! if Assigned(Client) and (Client.HostDockSite is TJvDockTabPageControl) then ! begin ! ShowClient(nil, Client); ! ! with TJvDockTabPageControl(Client.HostDockSite) do ! for I := 0 to Count - 1 do ! if Pages[I].Controls[0] = Client then ! begin ! Pages[I].Show; ! Break; ! end; ! if (Client.HostDockSite <> nil) and not (Client.HostDockSite is TJvDockPanel) then ! begin ! Result := Client.HostDockSite.Parent; ! ShowClient(Client, Result); ! if (Result <> nil) and (Result.HostDockSite is TJvDockTabPageControl) then ! { (rb) never called AFAICS } ! Result := ShowTabDockHost(Result) ! else ! ShowClient(nil, Result); ! end; ! end; ! end; ! ! function ShowConjoinDockHost(Client: TWinControl): TWinControl; ! begin ! Result := Client; ! if Assigned(Client) and Assigned(Client.HostDockSite) and not (Client.HostDockSite is TJvDockPanel) then ! begin ! ShowClient(nil, Client); ! if Client.HostDockSite.Parent <> nil then ! begin ! Result := Client.HostDockSite.Parent; ! ShowClient(Client, Result); ! if (Result <> nil) and (Result.HostDockSite is TJvDockConjoinPanel) then ! { (rb) never called AFAICS } ! Result := ShowConjoinDockHost(Result) ! else ! ShowClient(nil, Result); ! end; ! end; ! end; ! ! procedure ShowPopupPanel(Client: TWinControl); ! var ! Channel: TJvDockVSChannel; ! begin ! Channel := RetrieveChannel(Client.HostDockSite); ! if Assigned(Channel) then ! Channel.ShowPopupPanel(Client); ! end; ! begin ! TmpDockWindow := ADockWindow; ! repeat ! { Show single floating window } ! if Assigned(ADockWindow) and (ADockWindow.HostDockSite = nil) then ! ShowClient(nil, ADockWindow); ! ADockWindow := ShowTabDockHost(ADockWindow); ! ADockWindow := ShowConjoinDockHost(ADockWindow); ! { Show docked window } ! ADockWindow := ShowDockPanel(ADockWindow); ! until (ADockWindow = nil) or (ADockWindow.Parent = nil); ! ShowPopupPanel(TmpDockWindow); end; --- 692,701 ---- procedure UnAutoHideDockForm(ADockWindow: TWinControl); var ! ADockClient: TJvDockClient; begin ! // delegate to style ! ADockClient := FindDockClient(ADockWindow); ! if Assigned(ADockClient) and (ADockClient.DockStyle is TJvDockVSNetStyle) then ! TJvDockVSNetStyle(ADockClient.DockStyle).DoUnAutoHideDockForm(ADockWindow); end; *************** *** 1866,1876 **** if Assigned(LShowControl) then FVSPopupPanel.DoShowControl(LShowControl); finally Parent.EnableAlign; JvDockUnLockWindow; end; - if ActiveDockForm <> nil then - if ActiveDockForm.CanFocus then - ActiveDockForm.SetFocus; end; --- 1766,1775 ---- if Assigned(LShowControl) then FVSPopupPanel.DoShowControl(LShowControl); + + AutoFocusActiveDockForm; finally Parent.EnableAlign; JvDockUnLockWindow; end; end; *************** *** 2102,2107 **** Panel.VSChannel.RemoveDockControl(Control); Panel.ShowDockPanel(Panel.VisibleDockClientCount > 0, Control, sdfDockPanel); ! if (Panel.VSChannel.ActiveDockForm <> nil) and Panel.VSChannel.ActiveDockForm.CanFocus then ! Panel.VSChannel.ActiveDockForm.SetFocus; Panel.VSChannel.HidePopupPanel(Panel.VSChannel.FActivePane); ResetDockFormVisible; --- 2001,2005 ---- Panel.VSChannel.RemoveDockControl(Control); Panel.ShowDockPanel(Panel.VisibleDockClientCount > 0, Control, sdfDockPanel); ! Panel.VSChannel.AutoFocusActiveDockForm; Panel.VSChannel.HidePopupPanel(Panel.VSChannel.FActivePane); ResetDockFormVisible; *************** *** 3680,3686 **** if FActiveChannel.DockServer.DockStyle is TJvDockVSNetStyle then TJvDockVSNetStyle(FActiveChannel.DockServer.DockStyle).BeginPopup(FActiveChannel); ! if FActiveChannel.ActiveDockForm <> nil then ! if FActiveChannel.ActiveDockForm.CanFocus then ! FActiveChannel.ActiveDockForm.SetFocus; end; FActiveChannel := nil; --- 3578,3584 ---- if FActiveChannel.DockServer.DockStyle is TJvDockVSNetStyle then TJvDockVSNetStyle(FActiveChannel.DockServer.DockStyle).BeginPopup(FActiveChannel); ! ! FActiveChannel.AutoFocusActiveDockForm; ! HideAllPopupPanel(FActiveChannel); end; FActiveChannel := nil; *************** *** 3692,3695 **** --- 3590,3698 ---- end; + procedure TJvDockVSChannel.AutoFocusActiveDockForm; + begin + if DockServer.AutoFocusDockedForm and Assigned(ActiveDockForm) and ActiveDockForm.CanFocus then + ActiveDockForm.SetFocus; + end; + + procedure TJvDockVSNetStyle.DoHideDockForm(DockWindow: TWinControl); + var + TmpDockWindow: TWinControl; + + procedure HideDockChild(DockWindow: TWinControl); + var + I: Integer; + DockClient: TJvDockClient; + begin + if DockWindow = nil then + Exit; + if (DockWindow is TJvDockableForm) and (DockWindow.Visible) then + with TJvDockableForm(DockWindow).DockableControl do + for I := 0 to DockClientCount - 1 do + HideDockChild(TWinControl(DockClients[I])); + DockClient := FindDockClient(DockWindow); + if (DockWindow is TForm) and (TForm(DockWindow).FormStyle <> fsMDIChild) and + (DockClient.DockStyle <> nil) then + DockClient.DockStyle.HideDockForm(DockClient); + end; + + procedure HideDockParent(DockWindow: TWinControl); + var + Host: TWinControl; + DockClient: TJvDockClient; + begin + if (DockWindow <> nil) and (DockWindow.HostDockSite <> nil) then + begin + // work-around + if Assigned(RetrieveChannel(DockWindow.HostDockSite)) then + Exit; + + Host := DockWindow.HostDockSite; + if Host.VisibleDockClientCount = 0 then + if Host is TJvDockPanel then + TJvDockPanel(Host).ShowDockPanel(False, nil) + else + begin + if Host.Parent <> nil then + begin + DockClient := FindDockClient(Host.Parent); + if (DockClient <> nil) and (DockClient.DockStyle <> nil) then + DockClient.DockStyle.HideDockForm(DockClient); + HideDockParent(Host.Parent); + end; + end; + end; + end; + + procedure HidePopupPanel(Client: TWinControl); + var + Channel: TJvDockVSChannel; + begin + Channel := RetrieveChannel(Client.HostDockSite); + if Assigned(Channel) then + Channel.HidePopupPanel(Client); + end; + + begin + TmpDockWindow := DockWindow; + HideDockChild(DockWindow); + HideDockParent(DockWindow); + if (DockWindow.HostDockSite is TJvDockCustomControl) then + TJvDockCustomControl(DockWindow.HostDockSite).UpdateCaption(DockWindow); + HidePopupPanel(TmpDockWindow); + end; + + procedure TJvDockVSNetStyle.DoShowDockForm(DockWindow: TWinControl); + + procedure PopupAutoHiddenForm(Client: TWinControl); + var + Channel: TJvDockVSChannel; + begin + Channel := RetrieveChannel(Client.HostDockSite); + if Assigned(Channel) then + Channel.PopupDockForm(Client); + end; + + begin + inherited DoShowDockForm(DockWindow); + PopupAutoHiddenForm(DockWindow); + end; + + procedure TJvDockVSNetStyle.DoUnAutoHideDockForm(DockWindow: TWinControl); + + procedure ShowAutoHiddenForm(Client: TWinControl); + var + Channel: TJvDockVSChannel; + begin + Channel := RetrieveChannel(Client.HostDockSite); + if Assigned(Channel) then + Channel.ShowPopupPanel(Client); + end; + + begin + inherited DoShowDockForm(DockWindow); + ShowAutoHiddenForm(DockWindow); + end; + initialization {$IFDEF USEJVCL} |