mirror of https://gitlab.com/basile.b/dexed.git
support for widget docking persistence
This commit is contained in:
parent
cb9b60e8e8
commit
3f1d583490
|
@ -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;
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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 ---------------------------------------------------------------}
|
||||||
|
|
Loading…
Reference in New Issue