anchordocking: auto save on IDE close, disable in options

git-svn-id: trunk@46607 -
This commit is contained in:
mattias 2014-10-19 18:24:52 +00:00
parent 943bae5f54
commit 23d96e97a5
15 changed files with 150 additions and 46 deletions

View File

@ -403,6 +403,7 @@ type
FHeaderFilled: boolean;
FHideHeaderCaptionFloatingControl: boolean;
FPageAreaInPercent: integer;
FSaveOnClose: boolean;
FScaleOnResize: boolean;
FShowHeader: boolean;
FShowHeaderCaption: boolean;
@ -417,6 +418,7 @@ type
procedure SetHeaderStyle(AValue: TADHeaderStyle);
procedure SetHideHeaderCaptionFloatingControl(AValue: boolean);
procedure SetPageAreaInPercent(AValue: integer);
procedure SetSaveOnClose(AValue: boolean);
procedure SetScaleOnResize(AValue: boolean);
procedure SetShowHeader(AValue: boolean);
procedure SetShowHeaderCaption(AValue: boolean);
@ -433,6 +435,7 @@ type
property HeaderHint: string read FHeaderHint write SetHeaderHint;
property SplitterWidth: integer read FSplitterWidth write SetSplitterWidth;
property ScaleOnResize: boolean read FScaleOnResize write SetScaleOnResize;
property SaveOnClose: boolean read FSaveOnClose write SetSaveOnClose;
property ShowHeader: boolean read FShowHeader write SetShowHeader;
property ShowHeaderCaption: boolean read FShowHeaderCaption write SetShowHeaderCaption;
property HideHeaderCaptionFloatingControl: boolean read FHideHeaderCaptionFloatingControl write SetHideHeaderCaptionFloatingControl;
@ -484,6 +487,7 @@ type
FQueueSimplify: Boolean;
FRestoreLayouts: TAnchorDockRestoreLayouts;
FRestoring: boolean;
FSaveOnClose: boolean;
FScaleOnResize: boolean;
FShowHeader: boolean;
FShowHeaderCaption: boolean;
@ -517,6 +521,7 @@ type
procedure SetHeaderHint(AValue: string);
procedure SetHeaderStyle(AValue: TADHeaderStyle);
procedure SetPageAreaInPercent(AValue: integer);
procedure SetSaveOnClose(AValue: boolean);
procedure SetScaleOnResize(AValue: boolean);
procedure SetHeaderFlatten(AValue: boolean);
@ -635,6 +640,7 @@ type
property SplitterWidth: integer read FSplitterWidth write SetSplitterWidth default 4;
property ScaleOnResize: boolean read FScaleOnResize write SetScaleOnResize default true; // scale children when resizing a site
property SaveOnClose: boolean read FSaveOnClose write SetSaveOnClose default true; // you must call SaveLayoutToConfig yourself
property AllowDragging: boolean read FAllowDragging write SetAllowDragging default true;
property OptionsChangeStamp: int64 read FOptionsChangeStamp;
procedure IncreaseOptionsChangeStamp; inline;
@ -1237,6 +1243,13 @@ begin
IncreaseChangeStamp;
end;
procedure TAnchorDockSettings.SetSaveOnClose(AValue: boolean);
begin
if FSaveOnClose=AValue then Exit;
FSaveOnClose:=AValue;
IncreaseChangeStamp;
end;
procedure TAnchorDockSettings.SetScaleOnResize(AValue: boolean);
begin
if FScaleOnResize=AValue then Exit;
@ -1295,6 +1308,7 @@ begin
HeaderAlignLeft:=Config.GetValue('HeaderAlignLeft',120);
SplitterWidth:=Config.GetValue('SplitterWidth',4);
ScaleOnResize:=Config.GetValue('ScaleOnResize',true);
SaveOnClose:=Config.GetValue('SaveOnClose',true);
ShowHeader:=Config.GetValue('ShowHeader',true);
ShowHeaderCaption:=Config.GetValue('ShowHeaderCaption',true);
HideHeaderCaptionFloatingControl:=Config.GetValue('HideHeaderCaptionFloatingControl',true);
@ -1316,6 +1330,7 @@ begin
Config.SetDeleteValue('HeaderAlignLeft',HeaderAlignLeft,120);
Config.SetDeleteValue('SplitterWidth',SplitterWidth,4);
Config.SetDeleteValue('ScaleOnResize',ScaleOnResize,true);
Config.SetDeleteValue('SaveOnClose',SaveOnClose,true);
Config.SetDeleteValue('ShowHeader',ShowHeader,true);
Config.SetDeleteValue('ShowHeaderCaption',ShowHeaderCaption,true);
Config.SetDeleteValue('HideHeaderCaptionFloatingControl',HideHeaderCaptionFloatingControl,true);
@ -1337,6 +1352,7 @@ begin
and (HeaderHint=Settings.HeaderHint)
and (SplitterWidth=Settings.SplitterWidth)
and (ScaleOnResize=Settings.ScaleOnResize)
and (SaveOnClose=Settings.SaveOnClose)
and (ShowHeader=Settings.ShowHeader)
and (ShowHeaderCaption=Settings.ShowHeaderCaption)
and (HideHeaderCaptionFloatingControl=Settings.HideHeaderCaptionFloatingControl)
@ -2101,6 +2117,13 @@ begin
OptionsChanged;
end;
procedure TAnchorDockMaster.SetSaveOnClose(AValue: boolean);
begin
if FSaveOnClose=AValue then Exit;
FSaveOnClose:=AValue;
OptionsChanged;
end;
procedure TAnchorDockMaster.SetHeaderFlatten(AValue: boolean);
begin
if FHeaderFlatten=AValue then Exit;
@ -2288,6 +2311,7 @@ begin
FHideHeaderCaptionFloatingControl:=true;
FSplitterWidth:=4;
FScaleOnResize:=true;
FSaveOnClose:=true;
fNeedSimplify:=TFPList.Create;
fNeedFree:=TFPList.Create;
fDisabledAutosizing:=TFPList.Create;
@ -2855,6 +2879,7 @@ begin
HeaderAlignLeft := Settings.HeaderAlignLeft;
SplitterWidth := Settings.SplitterWidth;
ScaleOnResize := Settings.ScaleOnResize;
SaveOnClose := Settings.SaveOnClose;
ShowHeader := Settings.ShowHeader;
ShowHeaderCaption := Settings.ShowHeaderCaption;
HideHeaderCaptionFloatingControl := Settings.HideHeaderCaptionFloatingControl;
@ -2874,6 +2899,7 @@ begin
Settings.HeaderAlignLeft:=HeaderAlignLeft;
Settings.SplitterWidth:=SplitterWidth;
Settings.ScaleOnResize:=ScaleOnResize;
Settings.SaveOnClose:=SaveOnClose;
Settings.ShowHeader:=ShowHeader;
Settings.ShowHeaderCaption:=ShowHeaderCaption;
Settings.HideHeaderCaptionFloatingControl:=HideHeaderCaptionFloatingControl;

View File

@ -5,17 +5,18 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
Width = 416
ClientHeight = 482
ClientWidth = 416
OnClick = FrameClick
TabOrder = 0
DesignLeft = 647
DesignTop = 116
DesignLeft = 513
DesignTop = 189
object DragThresholdLabel: TLabel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = HeaderStyleComboBox
AnchorSideTop.Side = asrBottom
Left = 10
Height = 15
Top = 35
Width = 106
Top = 41
Width = 111
BorderSpacing.Left = 10
Caption = 'DragThresholdLabel'
ParentColor = False
@ -26,8 +27,8 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 10
Height = 15
Top = 301
Width = 115
Top = 357
Width = 117
BorderSpacing.Top = 10
Caption = 'HeaderAlignTopLabel'
ParentColor = False
@ -38,8 +39,8 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 10
Height = 15
Top = 372
Width = 114
Top = 428
Width = 120
BorderSpacing.Top = 10
Caption = 'HeaderAlignLeftLabel'
ParentColor = False
@ -50,21 +51,20 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideTop.Side = asrBottom
Left = 10
Height = 15
Top = 106
Width = 97
Top = 112
Width = 103
BorderSpacing.Top = 10
Caption = 'SplitterWidthLabel'
ParentColor = False
end
object ScaleOnResizeCheckBox: TCheckBox
AnchorSideLeft.Control = DragThresholdLabel
AnchorSideTop.Control = SplitterWidthTrackBar
AnchorSideTop.Control = SaveLayoutOnCloseCheckBox
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 177
Width = 147
BorderSpacing.Top = 10
Height = 24
Top = 203
Width = 160
Caption = 'ScaleOnResizeCheckBox'
ParentShowHint = False
ShowHint = True
@ -78,7 +78,7 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 10
Height = 46
Top = 50
Top = 56
Width = 396
Max = 20
OnChange = DragThresholdTrackBarChange
@ -97,7 +97,7 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 10
Height = 46
Top = 316
Top = 372
Width = 396
Frequency = 10
Max = 150
@ -117,7 +117,7 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 10
Height = 46
Top = 387
Top = 443
Width = 396
Frequency = 10
Max = 200
@ -137,7 +137,7 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideRight.Side = asrBottom
Left = 10
Height = 46
Top = 121
Top = 127
Width = 396
Min = 1
OnChange = SplitterWidthTrackBarChange
@ -151,10 +151,11 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideLeft.Control = ScaleOnResizeCheckBox
AnchorSideTop.Control = ShowHeaderCheckBox
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 215
Width = 181
Left = 25
Height = 24
Top = 251
Width = 191
BorderSpacing.Left = 15
Caption = 'ShowHeaderCaptionCheckBox'
ParentShowHint = False
ShowHint = True
@ -164,10 +165,10 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideLeft.Control = ShowHeaderCaptionCheckBox
AnchorSideTop.Control = ShowHeaderCaptionCheckBox
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 234
Width = 237
Left = 25
Height = 24
Top = 275
Width = 249
Caption = 'HideHeaderCaptionForFloatingCheckBox'
ParentShowHint = False
ShowHint = True
@ -178,9 +179,9 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideTop.Control = ScaleOnResizeCheckBox
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 196
Width = 139
Height = 24
Top = 227
Width = 149
Caption = 'ShowHeaderCheckBox'
ParentShowHint = False
ShowHint = True
@ -192,14 +193,14 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 107
Height = 23
Left = 112
Height = 29
Top = 6
Width = 299
Width = 294
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Right = 4
BorderSpacing.Around = 6
ItemHeight = 15
ItemHeight = 0
OnDrawItem = HeaderStyleComboBoxDrawItem
Style = csDropDownList
TabOrder = 8
@ -210,8 +211,8 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideTop.Side = asrCenter
Left = 10
Height = 15
Top = 10
Width = 91
Top = 13
Width = 96
BorderSpacing.Left = 10
Caption = 'HeaderStyleLabel'
ParentColor = False
@ -220,10 +221,10 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideLeft.Control = HideHeaderCaptionForFloatingCheckBox
AnchorSideTop.Control = HideHeaderCaptionForFloatingCheckBox
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 253
Width = 99
Left = 25
Height = 24
Top = 299
Width = 110
Caption = 'FlattenHeaders'
ParentShowHint = False
ShowHint = True
@ -233,13 +234,25 @@ object AnchorDockOptionsFrame: TAnchorDockOptionsFrame
AnchorSideLeft.Control = FlattenHeaders
AnchorSideTop.Control = FlattenHeaders
AnchorSideTop.Side = asrBottom
Left = 10
Height = 19
Top = 272
Width = 91
Left = 25
Height = 24
Top = 323
Width = 100
Caption = 'FilledHeaders'
ParentShowHint = False
ShowHint = True
TabOrder = 10
end
object SaveLayoutOnCloseCheckBox: TCheckBox
AnchorSideLeft.Control = SplitterWidthTrackBar
AnchorSideTop.Control = SplitterWidthTrackBar
AnchorSideTop.Side = asrBottom
Left = 10
Height = 24
Top = 179
Width = 187
BorderSpacing.Top = 6
Caption = 'SaveLayoutOnCloseCheckBox'
TabOrder = 11
end
end

View File

@ -39,7 +39,8 @@ uses
type
TAnchorDockOptionsFlag = (
adofShow_ShowHeader
adofShow_ShowHeader,
adofShow_ShowSaveOnClose
);
TAnchorDockOptionsFlags = set of TAnchorDockOptionsFlag;
@ -57,11 +58,13 @@ type
HeaderStyleComboBox: TComboBox;
HeaderStyleLabel: TLabel;
HideHeaderCaptionForFloatingCheckBox: TCheckBox;
SaveLayoutOnCloseCheckBox: TCheckBox;
ScaleOnResizeCheckBox: TCheckBox;
ShowHeaderCaptionCheckBox: TCheckBox;
ShowHeaderCheckBox: TCheckBox;
SplitterWidthLabel: TLabel;
SplitterWidthTrackBar: TTrackBar;
procedure FrameClick(Sender: TObject);
procedure HeaderStyleComboBoxDrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; {%H-}State: TOwnerDrawState);
procedure OkClick(Sender: TObject);
@ -157,6 +160,11 @@ begin
DrawADHeader(TComboBox(Control).Canvas,TADHeaderStyle(Index),ARect,true);
end;
procedure TAnchorDockOptionsFrame.FrameClick(Sender: TObject);
begin
end;
procedure TAnchorDockOptionsFrame.DragThresholdTrackBarChange(Sender: TObject);
begin
UpdateDragThresholdLabel;
@ -212,6 +220,7 @@ end;
procedure TAnchorDockOptionsFrame.ApplyFlags;
begin
ShowHeaderCheckBox.Visible:=adofShow_ShowHeader in Flags;
SaveLayoutOnCloseCheckBox.Visible:=adofShow_ShowSaveOnClose in Flags;
end;
procedure TAnchorDockOptionsFrame.SaveToMaster;
@ -250,6 +259,7 @@ begin
TheSettings.HeaderAlignLeft:=HeaderAlignLeftTrackBar.Position;
TheSettings.SplitterWidth:=SplitterWidthTrackBar.Position;
TheSettings.ScaleOnResize:=ScaleOnResizeCheckBox.Checked;
TheSettings.SaveOnClose:=SaveLayoutOnCloseCheckBox.Checked;
TheSettings.ShowHeader:=ShowHeaderCheckBox.Checked;
TheSettings.ShowHeaderCaption:=ShowHeaderCaptionCheckBox.Checked;
TheSettings.HideHeaderCaptionFloatingControl:=HideHeaderCaptionForFloatingCheckBox.Checked;
@ -293,6 +303,9 @@ begin
SplitterWidthTrackBar.Position:=TheSettings.SplitterWidth;
UpdateSplitterWidthLabel;
SaveLayoutOnCloseCheckBox.Caption:=adrsSaveLayoutOnClose;
SaveLayoutOnCloseCheckBox.Checked:=TheSettings.SaveOnClose;
ScaleOnResizeCheckBox.Caption:=adrsScaleOnResize;
ScaleOnResizeCheckBox.Hint:=adrsScaleSubSitesWhenASiteIsResized;
ScaleOnResizeCheckBox.Checked:=TheSettings.ScaleOnResize;

View File

@ -84,6 +84,7 @@ resourcestring
adrsSplitterWidth = 'Splitter width';
adrsSplitterThickness = 'Splitter thickness';
adrsScaleOnResize = 'Scale on resize';
adrsSaveLayoutOnClose = 'Save layout on close';
adrsScaleSubSitesWhenASiteIsResized =
'Scale sub sites when a site is resized';
adrsShowHeaderCaptions = 'Show header captions';

View File

@ -62,6 +62,7 @@ type
FCmdLineLayoutFile: string;
FSavedChangeStamp: int64;
FSavedDMChangeStamp: int64;
FSaveOnClose: boolean;
FUserLayoutLoaded: boolean;
procedure DockMasterCreateControl(Sender: TObject; aName: string;
var AControl: TControl; DoDisableAutoSizing: boolean);
@ -87,6 +88,7 @@ type
procedure SaveLayoutToFile(Filename: string);
property UserLayoutLoaded: boolean read FUserLayoutLoaded write SetUserLayoutLoaded;
property CmdLineLayoutFile: string read FCmdLineLayoutFile write FCmdLineLayoutFile;
property SaveOnClose: boolean read FSaveOnClose write FSaveOnClose;
// events
procedure MakeIDEWindowDockSite(AForm: TCustomForm; ASides: TDockSides = [alBottom]); override;
procedure MakeIDEWindowDockable(AControl: TWinControl); override;
@ -232,6 +234,7 @@ end;
constructor TIDEAnchorDockMaster.Create;
begin
inherited Create;
FSaveOnClose:=true;
IDEAnchorDockMaster:=Self;
DockMaster.OnCreateControl:=@DockMasterCreateControl;
DockMaster.OnShowOptions:=@ShowAnchorDockOptions;
@ -510,8 +513,16 @@ begin
end;
procedure TIDEAnchorDockMaster.OnIDEClose(Sender: TObject);
var
aForm: TCustomForm;
begin
SaveSettings;
if DockMaster.SaveOnClose then begin
debugln(['TIDEAnchorDockMaster.OnIDEClose auto save ...']);
aForm:=GetParentForm(Application.MainForm);
if (aForm<>nil) and aForm.Monitor.Primary then
SaveUserLayout;
end;
end;
procedure TIDEAnchorDockMaster.RestoreDefaultLayoutClicked(Sender: TObject);
@ -646,7 +657,7 @@ begin
OptionsFrame:=TAnchorDockOptionsFrame.Create(Self);
with OptionsFrame do begin
Name:='OptionsFrame';
Flags:=[adofShow_ShowHeader];
Flags:=[adofShow_ShowHeader,adofShow_ShowSaveOnClose];
end;
end;

View File

@ -242,6 +242,10 @@ msgstr "Obnovit výchozí rozložení"
msgid "right"
msgstr "vpravo"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Uložit rozvržení oken jako výchozí"

View File

@ -229,6 +229,10 @@ msgstr ""
msgid "right"
msgstr ""
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Speichere Fensterlayout als Vorgabe"

View File

@ -244,6 +244,10 @@ msgstr "Restaurar el diseño predeterminado"
msgid "right"
msgstr "derecha"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Guardar Diseño de ventana como predeterminado"

View File

@ -231,6 +231,10 @@ msgstr "Alapértelmezett elrendezés visszaállítása"
msgid "right"
msgstr "jobbra"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Ablakelrendezés mentése alapértelmezettnek"

View File

@ -240,6 +240,10 @@ msgstr "Ripristina disposizione default"
msgid "right"
msgstr "destra"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Salva l'aspetto della finestra come default"

View File

@ -247,6 +247,10 @@ msgstr "Atstatyti numatytąjį maketą"
msgid "right"
msgstr "dešinysis"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Lango maketą įrašyti kaip numatytąjį"

View File

@ -221,6 +221,10 @@ msgstr ""
msgid "right"
msgstr ""
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr ""

View File

@ -245,6 +245,10 @@ msgstr "Restaurar layout padrão"
msgid "right"
msgstr "direita"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Salvar \"layout\" da janela como padrão"

View File

@ -239,6 +239,10 @@ msgstr "Восстановить разбивку окна по умолчани
msgid "right"
msgstr "справа"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Сохранить разбивку окна как разбивку по умолчанию"

View File

@ -247,6 +247,10 @@ msgstr "Відновити стандартну схему"
msgid "right"
msgstr "правий"
#: anchordockstr.adrssavelayoutonclose
msgid "Save layout on close"
msgstr ""
#: anchordockstr.adrssavewindowlayoutasdefault
msgid "Save window layout as default"
msgstr "Зберегти схему вікон як типову"