support for widget docking persistence

This commit is contained in:
Basile Burg 2014-08-09 22:53:44 +02:00
parent cb9b60e8e8
commit 3f1d583490
3 changed files with 42 additions and 27 deletions

View File

@ -6,13 +6,12 @@ uses
{$IFDEF UNIX}{$IFDEF UseCThreads} {$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, anchordockpkg, Interfaces, Forms, lazcontrols, runtimetypeinfocontrols,
AnchorDocking, AnchorDockStorage, AnchorDockOptionsDlg, ce_main, ce_dcd; ce_main, ce_dcd;
{$R *.res} {$R *.res}
begin begin
RequireDerivedFormResource := True;
Application.Initialize; Application.Initialize;
Application.CreateForm(TCEMainForm, CEMainForm); Application.CreateForm(TCEMainForm, CEMainForm);
Application.Run; Application.Run;

View File

@ -1,7 +1,7 @@
object CEMainForm: TCEMainForm object CEMainForm: TCEMainForm
Left = 1064 Left = 645
Height = 49 Height = 49
Top = 186 Top = 204
Width = 745 Width = 745
AllowDropFiles = True AllowDropFiles = True
Caption = 'Coedit' Caption = 'Coedit'

View File

@ -233,6 +233,7 @@ type
procedure InitDocking; procedure InitDocking;
procedure InitSettings; procedure InitSettings;
procedure SaveSettings; procedure SaveSettings;
procedure LoadDocking;
procedure SaveDocking; procedure SaveDocking;
procedure KillPlugs; procedure KillPlugs;
@ -271,8 +272,6 @@ type
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override; destructor destroy; override;
procedure DockMasterCreateControl(Sender: TObject; aName: string; var
AControl: TControl; DoDisableAutoSizing: boolean);
// //
procedure openFile(const aFilename: string); procedure openFile(const aFilename: string);
procedure docChangeNotify(Sender: TObject; const aIndex: Integer); procedure docChangeNotify(Sender: TObject; const aIndex: Integer);
@ -424,7 +423,6 @@ var
aManager: TAnchorDockManager; aManager: TAnchorDockManager;
begin begin
DockMaster.MakeDockSite(Self, [akBottom], admrpChild); DockMaster.MakeDockSite(Self, [akBottom], admrpChild);
DockMaster.OnCreateControl := @DockMasterCreateControl;
DockMaster.OnShowOptions := @ShowAnchorDockOptions; DockMaster.OnShowOptions := @ShowAnchorDockOptions;
DockMaster.HeaderStyle := adhsPoints; DockMaster.HeaderStyle := adhsPoints;
@ -440,19 +438,21 @@ begin
DockMaster.GetAnchorSite(fWidgList.widget[i]).Header.HeaderPosition := adlhpTop; DockMaster.GetAnchorSite(fWidgList.widget[i]).Header.HeaderPosition := adlhpTop;
end; end;
DockMaster.ManualDock(DockMaster.GetAnchorSite(fEditWidg), Self, alBottom); DockMaster.ManualDock(DockMaster.GetAnchorSite(fEditWidg), DockMaster.GetSite(Self), alBottom);
DockMaster.ManualDock(DockMaster.GetAnchorSite(fMesgWidg), Self, alBottom); DockMaster.ManualDock(DockMaster.GetAnchorSite(fMesgWidg), DockMaster.GetSite(Self), alBottom);
DockMaster.ManualDock(DockMaster.GetAnchorSite(fStExpWidg), Self, alLeft); DockMaster.ManualDock(DockMaster.GetAnchorSite(fStExpWidg), DockMaster.GetSite(Self), alLeft);
DockMaster.ManualDock(DockMaster.GetAnchorSite(fFindWidg), DockMaster.ManualDock(DockMaster.GetAnchorSite(fFindWidg),
DockMaster.GetAnchorSite(fStExpWidg), alBottom, fStExpWidg); DockMaster.GetAnchorSite(fStExpWidg), alBottom, fStExpWidg);
width := width - fProjWidg.Width; width := width - fProjWidg.Width;
DockMaster.ManualDock(DockMaster.GetAnchorSite(fProjWidg), Self, alRight); DockMaster.ManualDock(DockMaster.GetAnchorSite(fProjWidg), DockMaster.GetSite(Self), alRight);
DockMaster.ManualDock(DockMaster.GetAnchorSite(fPrjCfWidg), DockMaster.ManualDock(DockMaster.GetAnchorSite(fPrjCfWidg),
DockMaster.GetAnchorSite(fProjWidg), alBottom, fProjWidg); DockMaster.GetAnchorSite(fProjWidg), alBottom, fProjWidg);
DockMaster.GetAnchorSite(fEditWidg).Header.HeaderPosition := adlhpTop; DockMaster.GetAnchorSite(fEditWidg).Header.HeaderPosition := adlhpTop;
DockMaster.GetAnchorSite(fExplWidg).Close; DockMaster.GetAnchorSite(fExplWidg).Close;
DockMaster.GetAnchorSite(fLibMWidg).Close; DockMaster.GetAnchorSite(fLibMWidg).Close;
LoadDocking;
end; end;
procedure TCEMainForm.InitSettings; procedure TCEMainForm.InitSettings;
@ -501,9 +501,34 @@ var
begin begin
xcfg := TXMLConfigStorage.Create(getDocPath + 'docking.xml',false); xcfg := TXMLConfigStorage.Create(getDocPath + 'docking.xml',false);
try try
// <Item1 Name="CEMainForm" Type="CustomSite" ChildCount="..."> is always missing DockMaster.SaveLayoutToConfig(xcfg);
//DockMaster.SaveLayoutToConfig(xcfg); xcfg.WriteToDisk;
//xcfg.WriteToDisk; finally
xcfg.Free;
end;
end;
procedure TCEMainForm.LoadDocking;
var
xcfg: TXMLConfigStorage;
str: TMemoryStream;
begin
if not fileExists(getDocPath + 'docking.xml') then
exit;
xcfg := TXMLConfigStorage.Create(getDocPath + 'docking.xml', true);
try
try
DockMaster.LoadLayoutFromConfig(xcfg, false);
except
exit;
end;
str := TMemoryStream.Create;
try
xcfg.SaveToStream(str);
str.saveToFile(getDocPath + 'docking.bak')
finally
str.Free;
end;
finally finally
xcfg.Free; xcfg.Free;
end; end;
@ -534,7 +559,6 @@ end;
destructor TCEMainForm.destroy; destructor TCEMainForm.destroy;
begin begin
SaveSettings; SaveSettings;
SaveDocking;
// //
KillPlugs; KillPlugs;
// //
@ -570,6 +594,8 @@ begin
[shortenPath(ed.fileName, 25)])) <> mrOK then exit; [shortenPath(ed.fileName, 25)])) <> mrOK then exit;
end; end;
canClose := true; canClose := true;
// saving doesnt work when csDestroying in comp.state.
SaveDocking;
end; end;
procedure TCEMainForm.ActionsUpdate(AAction: TBasicAction; var Handled: Boolean); procedure TCEMainForm.ActionsUpdate(AAction: TBasicAction; var Handled: Boolean);
@ -1400,17 +1426,7 @@ begin
win.BringToFront; win.BringToFront;
end; end;
procedure TCEMainForm.DockMasterCreateControl(Sender: TObject; aName: string; var
AControl: TControl; DoDisableAutoSizing: boolean);
var
i: NativeInt;
begin
for i := 0 to fWidgList.Count-1 do if fWidgList.widget[i].Name = aName then
begin
AControl := fWidgList.widget[i];
if DoDisableAutoSizing then AControl.DisableAutoSizing;
end;
end;
{$ENDREGION} {$ENDREGION}
{$REGION project ---------------------------------------------------------------} {$REGION project ---------------------------------------------------------------}