dockmanager example: again try dedicated edit window (conditional).

added docking specific patches.

git-svn-id: trunk@20791 -
This commit is contained in:
dodi 2009-07-03 10:22:19 +00:00
parent bb35b3de4e
commit aed2c24191
9 changed files with 241 additions and 17 deletions

4
.gitattributes vendored
View File

@ -2360,6 +2360,10 @@ examples/dockmanager/package/fdockbook.lfm svneol=native#text/plain
examples/dockmanager/package/fdockbook.lrs svneol=native#text/pascal
examples/dockmanager/package/fdockbook.pas svneol=native#text/pascal
examples/dockmanager/package/zoneheader.inc svneol=native#text/pascal
examples/dockmanager/patches/FloatHostDockable.patch svneol=native#text/pascal
examples/dockmanager/patches/NewClients.patch svneol=native#text/pascal
examples/dockmanager/patches/README.txt svneol=native#text/plain
examples/dockmanager/patches/ToolButtonAutoSizeAlign.patch svneol=native#text/pascal
examples/dockmanager/toolbar/README.txt svneol=native#text/plain
examples/dockmanager/toolbar/test1.lpi svneol=native#text/plain
examples/dockmanager/toolbar/test1.lpr svneol=native#text/plain

View File

@ -8,7 +8,7 @@
<TargetFileExt Value=".exe"/>
<Title Value="easyeditor"/>
<UseXPManifest Value="True"/>
<ActiveEditorIndexAtStart Value="2"/>
<ActiveEditorIndexAtStart Value="0"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
@ -36,14 +36,14 @@
<PackageName Value="LCL"/>
</Item3>
</RequiredPackages>
<Units Count="23">
<Units Count="24">
<Unit0>
<Filename Value="easyeditor.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="easyeditor"/>
<CursorPos X="47" Y="17"/>
<TopLine Value="1"/>
<UsageCount Value="53"/>
<UsageCount Value="54"/>
</Unit0>
<Unit1>
<Filename Value="editmain.pas"/>
@ -51,10 +51,10 @@
<ComponentName Value="MainForm"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="EditMain"/>
<CursorPos X="1" Y="33"/>
<TopLine Value="1"/>
<CursorPos X="38" Y="90"/>
<TopLine Value="70"/>
<EditorIndex Value="0"/>
<UsageCount Value="53"/>
<UsageCount Value="54"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@ -65,7 +65,7 @@
<UnitName Value="fDockBook"/>
<CursorPos X="1" Y="286"/>
<TopLine Value="238"/>
<EditorIndex Value="2"/>
<EditorIndex Value="4"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit2>
@ -195,9 +195,11 @@
</Unit20>
<Unit21>
<Filename Value="..\..\..\lcl\include\customform.inc"/>
<CursorPos X="22" Y="318"/>
<TopLine Value="315"/>
<CursorPos X="1" Y="1690"/>
<TopLine Value="1666"/>
<EditorIndex Value="1"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit21>
<Unit22>
<Filename Value="feditform.pas"/>
@ -205,14 +207,26 @@
<ComponentName Value="EditPage"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="fEditForm"/>
<CursorPos X="42" Y="40"/>
<CursorPos X="37" Y="41"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="22"/>
<EditorIndex Value="2"/>
<UsageCount Value="23"/>
<Loaded Value="True"/>
</Unit22>
<Unit23>
<Filename Value="feditbook.pas"/>
<ComponentName Value="EditBook"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="fEditBook"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit23>
</Units>
<JumpHistory Count="25" HistoryIndex="24">
<JumpHistory Count="29" HistoryIndex="28">
<Position1>
<Filename Value="..\package\fdockbook.pas"/>
<Caret Line="58" Column="1" TopLine="24"/>
@ -313,6 +327,22 @@
<Filename Value="..\package\fdockbook.pas"/>
<Caret Line="244" Column="9" TopLine="236"/>
</Position25>
<Position26>
<Filename Value="feditform.pas"/>
<Caret Line="30" Column="6" TopLine="10"/>
</Position26>
<Position27>
<Filename Value="editmain.pas"/>
<Caret Line="89" Column="21" TopLine="64"/>
</Position27>
<Position28>
<Filename Value="feditform.pas"/>
<Caret Line="41" Column="37" TopLine="1"/>
</Position28>
<Position29>
<Filename Value="..\..\..\lcl\include\customform.inc"/>
<Caret Line="1690" Column="1" TopLine="1666"/>
</Position29>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>

View File

@ -1,3 +1,5 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TMainForm','FORMDATA',[
'TPF0'#9'TMainForm'#8'MainForm'#4'Left'#2#9#6'Height'#2'+'#3'Top'#2'g'#5'Widt'
+'h'#3#144#1#7'Caption'#6#8'MainForm'#4'Menu'#7#9'MainMenu1'#8'OnCreate'#7#10

View File

@ -16,14 +16,24 @@ ToDo:
*)
{$mode objfpc}{$H+}
{$DEFINE EditBook}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
{$IFDEF EditBook}
fEditBook,
{$ELSE}
{$ENDIF}
Menus, fDockBook, fEditForm, SynEdit;
type
{$IFDEF EditBook}
TEditForm = TEditBook;
{$ELSE}
TEditForm = TEasyDockBook;
{$ENDIF}
TEasyEdit = TEditPage;
TMainForm = class(TForm)
@ -39,7 +49,7 @@ type
private
//MyEdit: TEasyPages;
Editors: TList;
CurForm: TEasyDockBook;
CurForm: TEditForm;
CurEdit: TEasyEdit;
public
function OpenFile(const AName: string): TObject;
@ -75,6 +85,11 @@ end;
function TMainForm.OpenFile(const AName: string): TObject;
begin
{$IFDEF EditBook}
if MRUEdit = nil then
MRUEdit := TEditForm.Create(self);
CurForm := MRUEdit;
{$ELSE}
if Editors = nil then
Editors := TList.Create;
if Editors.Count = 0 then begin
@ -83,6 +98,7 @@ begin
end;
if CurForm = nil then
pointer(CurForm) := Editors.Items[0];
{$ENDIF}
//todo: load the file
CurEdit := TEasyEdit.Create(self);
//CurEdit.FloatingDockSiteClass := TEasyDockBook; //provisions there???

View File

@ -27,8 +27,7 @@ type
implementation
uses
//EditMain;
fDockBook;
EditMain;
{ TEditPage }
@ -37,7 +36,9 @@ begin
inherited Create(AOwner);
DragKind := dkDock;
DragMode := dmAutomatic;
FloatingDockSiteClass := TEasyDockBook;
//FloatingDockSiteClass := TEasyDockBook;
//FloatingDockSiteClass := TEditBook;
FloatingDockSiteClass := TEditForm;
end;
function TEditPage.GetDefaultDockCaption: string;

View File

@ -0,0 +1,13 @@
Index: customdockform.inc
===================================================================
--- customdockform.inc (revision 20785)
+++ customdockform.inc (working copy)
@@ -58,6 +58,8 @@
BorderStyle := bsSizeToolWin;
DockSite := True;
FormStyle := fsStayOnTop;
+ DragMode := dmAutomatic;
+ DragKind := dkDock;
end;
// included by forms.pp

View File

@ -0,0 +1,111 @@
Index: controls.pp
===================================================================
--- controls.pp (revision 20785)
+++ controls.pp (working copy)
@@ -1585,7 +1585,8 @@
FOnGetDockCaption: TGetDockCaptionEvent;
FWinControls: TFPList; // the child controls (only TWinControl, no TControl)
FDefWndProc: Pointer;
- FDockClients: TFPList;
+ //FDockClients: TFPList;
+ FNewDockClients: TFPList;
FClientWidth: Integer;
FClientHeight: Integer;
FDockManager: TDockManager;
@@ -1618,6 +1619,7 @@
function GetControlCount: Integer;
function GetDockClientCount: Integer;
function GetDockClients(Index: Integer): TControl;
+ function GetDockClientList: TFPList; virtual;
function GetHandle: HWND;
function GetIsResizing: boolean;
function GetTabOrder: TTabOrder;
@@ -1727,6 +1729,7 @@
procedure SetDockManager(AMgr: TDockManager);
procedure DoFloatMsg(ADockSource: TDragDockObject); override;//CM_FLOAT
procedure DoGetDockCaption(AControl: TControl; var ACaption: String); virtual;
+ property FDockClients: TFPList read GetDockClientList;
protected
// mouse and keyboard
procedure DoEnter; dynamic;
Index: include/wincontrol.inc
===================================================================
--- include/wincontrol.inc (revision 20785)
+++ include/wincontrol.inc (working copy)
@@ -5935,6 +5935,26 @@
Result := 0;
end;
+{------------------------------------------------------------------------------
+ function TWinControl.GetVisibleDockClientCount: Integer;
+ ------------------------------------------------------------------------------}
+function TWinControl.GetVisibleDockClientCount: Integer;
+var
+ i: integer;
+ lst: TFPList;
+begin
+ Result := 0;
+ lst := FDockClients;
+ if lst=nil then exit;
+ for i:=lst.Count-1 downto 0 do
+ if TControl(lst[I]).Visible then inc(Result);
+end;
+
+function TWinControl.GetDockClientList: TFPList;
+begin
+ Result := FNewDockClients;
+end;
+
function TWinControl.GetDockClients(Index: Integer): TControl;
begin
if FDockClients<>nil then
@@ -6054,7 +6074,8 @@
FreeThenNil(FDockManager)
else
FDockManager:=nil;
- FreeThenNil(FDockClients);
+ //FreeThenNil(FDockClients);
+ FreeThenNil(FNewDockClients);
FreeThenNil(FTabList);
//DebugLn('[TWinControl.Destroy] D ',Name,':',ClassName);
inherited Destroy;
@@ -7133,19 +7154,6 @@
end;
{------------------------------------------------------------------------------
- function TWinControl.GetVisibleDockClientCount: Integer;
- ------------------------------------------------------------------------------}
-function TWinControl.GetVisibleDockClientCount: Integer;
-var
- i: integer;
-begin
- Result := 0;
- if FDockClients=nil then exit;
- for i:=FDockClients.Count-1 downto 0 do
- if TControl(FDockClients[I]).Visible then inc(Result);
-end;
-
-{------------------------------------------------------------------------------
procedure TWinControl.SetChildSizing(const AValue: TControlChildSizing);
------------------------------------------------------------------------------}
procedure TWinControl.SetChildSizing(const AValue: TControlChildSizing);
@@ -7165,14 +7173,10 @@
FDockSite := NewDockSite;
if not (csDesigning in ComponentState) then begin
DragManager.RegisterDockSite(Self,NewDockSite);
- if not NewDockSite then begin
- FreeAndNil(FDockClients);
- FDockClients := nil;
- DockManager := nil;
- end
- else begin
- if FDockClients = nil then FDockClients := TFPList.Create;
- DockManager := CreateDockManager;
+ if NewDockSite then begin
+ if FDockClients = nil then FNewDockClients := TFPList.Create;
+ if UseDockManager then
+ DockManager := CreateDockManager;
end;
end;
end;
tc········

View File

@ -0,0 +1,19 @@
This directory contains some patches, which may not have found their way into the LCL.
ToolButtonAutoSizeAlign.patch
=============================
1. makes toolbuttons preserve better their autosize width.
2. adds new toolbuttons *after* the existing ones.
Apply to improve the notebook behaviour and appearance.
FloatHostDockable.patch
=======================
Makes the default floating host form dockable.
NewClients.patch
----------------
Prevent loss of dock client management.
Apply to increase application stability and dock site appearance.

View File

@ -0,0 +1,28 @@
Index: toolbutton.inc
===================================================================
--- toolbutton.inc (revision 20785)
+++ toolbutton.inc (working copy)
@@ -853,7 +853,7 @@
FToolBar:=nil;
if AParent is TToolBar then
begin
- if Style in [tbsButton,tbsDropDown,tbsCheck] then
+ if (Style in [tbsButton,tbsDropDown,tbsCheck]) and not AutoSize then
NewWidth:=TToolBar(AParent).ButtonWidth
else
NewWidth:=Width;
@@ -869,8 +869,13 @@
begin
FToolBar:=TToolBar(Parent);
i := Index;
- if i < 0 then
+ if i < 0 then begin
+ //move button last
+ i := FToolBar.ButtonCount - 1;
+ if i >= 0 then
+ Left := FToolBar.Buttons[i].Left + FToolBar.Buttons[i].Width;
FToolBar.AddButton(Self);
+ end;
UpdateVisibleToolbar;
end;
//DebugLn(['TToolButton.SetParent A ',Name,' NewIndex=',Index]);