mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-27 11:40:29 +02:00
anchordocking: save options frame
git-svn-id: trunk@34744 -
This commit is contained in:
parent
271d88305a
commit
3e287c296d
@ -386,6 +386,7 @@ type
|
||||
HeaderButtonSize: integer;
|
||||
procedure LoadFromConfig(Config: TConfigStorage);
|
||||
procedure SaveToConfig(Config: TConfigStorage);
|
||||
function IsEqual(Settings: TAnchorDockSettings): boolean; reintroduce;
|
||||
end;
|
||||
|
||||
TAnchorDockMaster = class;
|
||||
@ -513,6 +514,7 @@ type
|
||||
procedure SaveSettingsToConfig(Config: TConfigStorage);
|
||||
procedure LoadSettings(Settings: TAnchorDockSettings);
|
||||
procedure SaveSettings(Settings: TAnchorDockSettings);
|
||||
function SettingsAreEqual(Settings: TAnchorDockSettings): boolean;
|
||||
|
||||
// manual docking
|
||||
procedure ManualFloat(AControl: TControl);
|
||||
@ -1003,6 +1005,24 @@ begin
|
||||
Config.UndoAppendBasePath;
|
||||
end;
|
||||
|
||||
function TAnchorDockSettings.IsEqual(Settings: TAnchorDockSettings): boolean;
|
||||
begin
|
||||
debugln(['TAnchorDockSettings.IsEqual ',DragTreshold,' ',Settings.DragTreshold]);
|
||||
Result:=(DragTreshold=Settings.DragTreshold)
|
||||
and (DockOutsideMargin=Settings.DockOutsideMargin)
|
||||
and (DockParentMargin=Settings.DockParentMargin)
|
||||
and (PageAreaInPercent=Settings.PageAreaInPercent)
|
||||
and (HeaderAlignTop=Settings.HeaderAlignTop)
|
||||
and (HeaderAlignLeft=Settings.HeaderAlignLeft)
|
||||
and (HeaderHint=Settings.HeaderHint)
|
||||
and (SplitterWidth=Settings.SplitterWidth)
|
||||
and (ScaleOnResize=Settings.ScaleOnResize)
|
||||
and (ShowHeaderCaption=Settings.ShowHeaderCaption)
|
||||
and (HideHeaderCaptionFloatingControl=Settings.HideHeaderCaptionFloatingControl)
|
||||
and (AllowDragging=Settings.AllowDragging)
|
||||
and (HeaderButtonSize=Settings.HeaderButtonSize);
|
||||
end;
|
||||
|
||||
{ TAnchorDockMaster }
|
||||
|
||||
function TAnchorDockMaster.GetControls(Index: integer): TControl;
|
||||
@ -2361,6 +2381,20 @@ begin
|
||||
Settings.HeaderButtonSize:=HeaderButtonSize;
|
||||
end;
|
||||
|
||||
function TAnchorDockMaster.SettingsAreEqual(Settings: TAnchorDockSettings
|
||||
): boolean;
|
||||
var
|
||||
Cur: TAnchorDockSettings;
|
||||
begin
|
||||
Cur:=TAnchorDockSettings.Create;
|
||||
try
|
||||
SaveSettings(Cur);
|
||||
Result:=Cur.IsEqual(Settings);
|
||||
finally
|
||||
Cur.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAnchorDockMaster.ManualFloat(AControl: TControl);
|
||||
var
|
||||
Site: TAnchorDockHostSite;
|
||||
|
@ -35,7 +35,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
|
||||
StdCtrls, ComCtrls, AnchorDocking, AnchorDockStr;
|
||||
StdCtrls, ComCtrls, LCLProc, AnchorDocking, AnchorDockStr;
|
||||
|
||||
type
|
||||
|
||||
@ -60,7 +60,9 @@ type
|
||||
procedure SplitterWidthTrackBarChange(Sender: TObject);
|
||||
private
|
||||
FMaster: TAnchorDockMaster;
|
||||
FSettings: TAnchorDockSettings;
|
||||
procedure SetMaster(const AValue: TAnchorDockMaster);
|
||||
procedure SetSettings(AValue: TAnchorDockSettings);
|
||||
procedure UpdateDragThresholdLabel;
|
||||
procedure UpdateHeaderAlignTopLabel;
|
||||
procedure UpdateHeaderAlignLeftLabel;
|
||||
@ -68,7 +70,10 @@ type
|
||||
public
|
||||
procedure SaveToMaster;
|
||||
procedure LoadFromMaster;
|
||||
procedure SaveToSettings(TheSettings: TAnchorDockSettings);
|
||||
procedure LoadFromSettings(TheSettings: TAnchorDockSettings);
|
||||
property Master: TAnchorDockMaster read FMaster write SetMaster;
|
||||
property Settings: TAnchorDockSettings read FSettings write SetSettings;
|
||||
end;
|
||||
|
||||
function ShowAnchorDockOptions(ADockMaster: TAnchorDockMaster): TModalResult;
|
||||
@ -125,7 +130,10 @@ end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.OkClick(Sender: TObject);
|
||||
begin
|
||||
SaveToMaster;
|
||||
if Settings<>nil then
|
||||
SaveToSettings(Settings);
|
||||
if Master<>nil then
|
||||
SaveToMaster;
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.DragThresholdTrackBarChange(Sender: TObject);
|
||||
@ -141,6 +149,14 @@ begin
|
||||
LoadFromMaster;
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.SetSettings(AValue: TAnchorDockSettings);
|
||||
begin
|
||||
if FSettings=AValue then Exit;
|
||||
FSettings:=AValue;
|
||||
if Settings<>nil then
|
||||
LoadFromSettings(Settings);
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.UpdateDragThresholdLabel;
|
||||
begin
|
||||
DragThresholdLabel.Caption:=adrsDragThreshold
|
||||
@ -166,49 +182,79 @@ begin
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.SaveToMaster;
|
||||
var
|
||||
CurSettings: TAnchorDockSettings;
|
||||
begin
|
||||
Master.DragTreshold := DragThresholdTrackBar.Position;
|
||||
Master.HeaderAlignTop := HeaderAlignTopTrackBar.Position;
|
||||
Master.HeaderAlignLeft := HeaderAlignLeftTrackBar.Position;
|
||||
Master.SplitterWidth := SplitterWidthTrackBar.Position;
|
||||
Master.ScaleOnResize := ScaleOnResizeCheckBox.Checked;
|
||||
Master.ShowHeaderCaption := ShowHeaderCaptionCheckBox.Checked;
|
||||
Master.HideHeaderCaptionFloatingControl := HideHeaderCaptionForFloatingCheckBox.Checked;
|
||||
CurSettings:=TAnchorDockSettings.Create;
|
||||
try
|
||||
SaveToSettings(CurSettings);
|
||||
Master.LoadSettings(CurSettings);
|
||||
finally
|
||||
CurSettings.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.LoadFromMaster;
|
||||
var
|
||||
CurSettings: TAnchorDockSettings;
|
||||
begin
|
||||
CurSettings:=TAnchorDockSettings.Create;
|
||||
try
|
||||
Master.SaveSettings(CurSettings);
|
||||
LoadFromSettings(CurSettings);
|
||||
finally
|
||||
CurSettings.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.SaveToSettings(
|
||||
TheSettings: TAnchorDockSettings);
|
||||
begin
|
||||
TheSettings.DragTreshold := DragThresholdTrackBar.Position;
|
||||
DebugLn(['TAnchorDockOptionsFrame.SaveToSettings ',TheSettings.DragTreshold,' ',DragThresholdTrackBar.Position]);
|
||||
TheSettings.HeaderAlignTop := HeaderAlignTopTrackBar.Position;
|
||||
TheSettings.HeaderAlignLeft := HeaderAlignLeftTrackBar.Position;
|
||||
TheSettings.SplitterWidth := SplitterWidthTrackBar.Position;
|
||||
TheSettings.ScaleOnResize := ScaleOnResizeCheckBox.Checked;
|
||||
TheSettings.ShowHeaderCaption := ShowHeaderCaptionCheckBox.Checked;
|
||||
TheSettings.HideHeaderCaptionFloatingControl := HideHeaderCaptionForFloatingCheckBox.Checked;
|
||||
end;
|
||||
|
||||
procedure TAnchorDockOptionsFrame.LoadFromSettings(
|
||||
TheSettings: TAnchorDockSettings);
|
||||
begin
|
||||
DragThresholdTrackBar.Hint:=
|
||||
adrsAmountOfPixelTheMouseHasToDragBeforeDragStarts;
|
||||
DragThresholdTrackBar.Position:=Master.DragTreshold;
|
||||
DragThresholdTrackBar.Position:=TheSettings.DragTreshold;
|
||||
UpdateDragThresholdLabel;
|
||||
|
||||
HeaderAlignTopTrackBar.Hint:=
|
||||
adrsMoveHeaderToTopWhenWidthHeight100HeaderAlignTop;
|
||||
HeaderAlignTopTrackBar.Position:=Master.HeaderAlignTop;
|
||||
HeaderAlignTopTrackBar.Position:=TheSettings.HeaderAlignTop;
|
||||
UpdateHeaderAlignTopLabel;
|
||||
|
||||
HeaderAlignLeftTrackBar.Hint:=
|
||||
adrsMoveHeaderToLeftWhenWidthHeight100HeaderAlignLeft;
|
||||
HeaderAlignLeftTrackBar.Position:=Master.HeaderAlignLeft;
|
||||
HeaderAlignLeftTrackBar.Position:=TheSettings.HeaderAlignLeft;
|
||||
UpdateHeaderAlignLeftLabel;
|
||||
|
||||
SplitterWidthTrackBar.Hint:=adrsSplitterThickness;
|
||||
SplitterWidthTrackBar.Position:=Master.SplitterWidth;
|
||||
SplitterWidthTrackBar.Position:=TheSettings.SplitterWidth;
|
||||
UpdateSplitterWidthLabel;
|
||||
|
||||
ScaleOnResizeCheckBox.Caption:=adrsScaleOnResize;
|
||||
ScaleOnResizeCheckBox.Hint:=adrsScaleSubSitesWhenASiteIsResized;
|
||||
ScaleOnResizeCheckBox.Checked:=Master.ScaleOnResize;
|
||||
ScaleOnResizeCheckBox.Checked:=TheSettings.ScaleOnResize;
|
||||
|
||||
ShowHeaderCaptionCheckBox.Caption:=adrsShowHeaderCaptions;
|
||||
ShowHeaderCaptionCheckBox.Hint:=adrsShowCaptionsOfDockedControlsInTheHeader;
|
||||
ShowHeaderCaptionCheckBox.Checked:=Master.ShowHeaderCaption;
|
||||
ShowHeaderCaptionCheckBox.Checked:=TheSettings.ShowHeaderCaption;
|
||||
|
||||
HideHeaderCaptionForFloatingCheckBox.Caption:=adrsNoCaptionsForFloatingSites;
|
||||
HideHeaderCaptionForFloatingCheckBox.Hint:=
|
||||
adrsHideHeaderCaptionsForSitesWithOnlyOneDockedControl;
|
||||
HideHeaderCaptionForFloatingCheckBox.Checked:=Master.HideHeaderCaptionFloatingControl;
|
||||
HideHeaderCaptionForFloatingCheckBox.Checked:=
|
||||
TheSettings.HideHeaderCaptionFloatingControl;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -81,7 +81,7 @@ type
|
||||
procedure MakeIDEWindowDockSite(AForm: TCustomForm; ASides: TDockSides = [alBottom]); override;
|
||||
procedure MakeIDEWindowDockable(AControl: TWinControl); override;
|
||||
function AddableInWindowMenu(AForm: TCustomForm): boolean; override;
|
||||
function GetDefaultLayoutFilename: string;
|
||||
function GetDefaultLayoutFilename(Full: boolean): string;
|
||||
procedure LoadDefaultLayout;
|
||||
procedure LoadUserLayout;
|
||||
procedure SaveUserLayout;
|
||||
@ -107,6 +107,8 @@ type
|
||||
TAnchorDockIDEFrame = class(TAbstractIDEOptionsEditor)
|
||||
EnableCheckBox: TCheckBox;
|
||||
NoteLabel: TLabel;
|
||||
private
|
||||
FSettings: TAnchorDockSettings;
|
||||
public
|
||||
OptionsFrame: TAnchorDockOptionsFrame;
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
@ -261,9 +263,11 @@ begin
|
||||
Result:=true;
|
||||
end;
|
||||
|
||||
function TIDEAnchorDockMaster.GetDefaultLayoutFilename: string;
|
||||
function TIDEAnchorDockMaster.GetDefaultLayoutFilename(Full: boolean): string;
|
||||
begin
|
||||
Result:=AppendPathDelim(LazarusIDE.GetPrimaryConfigPath)+DefaultConfigFileName;
|
||||
Result:=DefaultConfigFileName;
|
||||
if Full then
|
||||
Result:=AppendPathDelim(LazarusIDE.GetPrimaryConfigPath)+Result;
|
||||
end;
|
||||
|
||||
procedure TIDEAnchorDockMaster.LoadDefaultLayout;
|
||||
@ -285,7 +289,7 @@ var
|
||||
Filename: String;
|
||||
Config: TConfigStorage;
|
||||
begin
|
||||
Filename:=DefaultConfigFileName;
|
||||
Filename:=GetDefaultLayoutFilename(false);
|
||||
try
|
||||
debugln(['TIDEAnchorDockMaster.LoadUserLayout ',Filename]);
|
||||
Config:=GetIDEConfigStorage(Filename,true);
|
||||
@ -315,7 +319,7 @@ var
|
||||
Filename: String;
|
||||
Config: TConfigStorage;
|
||||
begin
|
||||
Filename:=DefaultConfigFileName;
|
||||
Filename:=GetDefaultLayoutFilename(false);
|
||||
try
|
||||
debugln(['TIDEAnchorDockMaster.SaveDefaultLayout ',Filename]);
|
||||
Config:=GetIDEConfigStorage(Filename,false);
|
||||
@ -558,7 +562,7 @@ begin
|
||||
if FChangeStamp<High(FChangeStamp) then
|
||||
inc(FChangeStamp)
|
||||
else
|
||||
FChangeStamp:=low(FChangeStamp);
|
||||
FChangeStamp:=low(FChangeStamp);
|
||||
end;
|
||||
|
||||
{ TAnchorDockIDEFrame }
|
||||
@ -567,6 +571,7 @@ constructor TAnchorDockIDEFrame.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
|
||||
FSettings:=TAnchorDockSettings.Create;
|
||||
OptionsFrame:=TAnchorDockOptionsFrame.Create(Self);
|
||||
with OptionsFrame do begin
|
||||
Name:='OptionsFrame';
|
||||
@ -575,6 +580,7 @@ end;
|
||||
|
||||
destructor TAnchorDockIDEFrame.Destroy;
|
||||
begin
|
||||
FreeAndNil(FSettings);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -609,14 +615,21 @@ procedure TAnchorDockIDEFrame.ReadSettings(AOptions: TAbstractIDEOptions);
|
||||
begin
|
||||
if not (AOptions is SupportedOptionsClass) then exit;
|
||||
EnableCheckBox.Checked:=IDEAnchorDockMaster.Enabled;
|
||||
OptionsFrame.Master:=DockMaster;
|
||||
DockMaster.SaveSettings(FSettings);
|
||||
OptionsFrame.LoadFromSettings(FSettings);
|
||||
end;
|
||||
|
||||
procedure TAnchorDockIDEFrame.WriteSettings(AOptions: TAbstractIDEOptions);
|
||||
begin
|
||||
if not (AOptions is SupportedOptionsClass) then exit;
|
||||
IDEAnchorDockMaster.Enabled:=EnableCheckBox.Checked;
|
||||
OptionsFrame.SaveToMaster;
|
||||
OptionsFrame.SaveToSettings(FSettings);
|
||||
if (not DockMaster.SettingsAreEqual(FSettings))
|
||||
or (not FileExistsUTF8(IDEAnchorDockMaster.GetDefaultLayoutFilename(true)))
|
||||
then begin
|
||||
DockMaster.LoadSettings(FSettings);
|
||||
IDEAnchorDockMaster.SaveUserLayout;
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TAnchorDockIDEFrame.
|
||||
|
Loading…
Reference in New Issue
Block a user