anchordocking: save options frame

git-svn-id: trunk@34744 -
This commit is contained in:
mattias 2012-01-15 11:44:42 +00:00
parent 271d88305a
commit 3e287c296d
3 changed files with 117 additions and 24 deletions

View File

@ -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;

View File

@ -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.

View File

@ -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.