1
{ Unit implementing anchor docking.
3
Copyright (C) 2010 Mattias Gaertner mattias@freepascal.org
5
This library is free software; you can redistribute it and/or modify it
6
under the terms of the GNU Library General Public License as published by
7
the Free Software Foundation; either version 2 of the License, or (at your
8
option) any later version with the following modification:
10
As a special exception, the copyright holders of this library give you
11
permission to link this library with independent modules to produce an
12
executable, regardless of the license terms of these independent modules,and
13
to copy and distribute the resulting executable under terms of your choice,
14
provided that you also meet, for each linked independent module, the terms
15
and conditions of the license of that module. An independent module is a
16
module which is not derived from or based on this library. If you modify
17
this library, you may extend this exception to your version of the library,
18
but you are not obligated to do so. If you do not wish to do so, delete this
19
exception statement from your version.
21
This program is distributed in the hope that it will be useful, but WITHOUT
22
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
26
You should have received a copy of the GNU Library General Public License
27
along with this library; if not, write to the Free Software Foundation,
28
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
30
unit AnchorDockOptionsDlg;
37
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
38
StdCtrls, ComCtrls, LCLProc, AnchorDocking, AnchorDockStr;
41
TAnchorDockOptionsFlag = (
44
TAnchorDockOptionsFlags = set of TAnchorDockOptionsFlag;
46
{ TAnchorDockOptionsFrame }
48
TAnchorDockOptionsFrame = class(TFrame)
49
DragThresholdLabel: TLabel;
50
DragThresholdTrackBar: TTrackBar;
51
HeaderAlignLeftLabel: TLabel;
52
HeaderAlignLeftTrackBar: TTrackBar;
53
HeaderAlignTopLabel: TLabel;
54
HeaderAlignTopTrackBar: TTrackBar;
55
HideHeaderCaptionForFloatingCheckBox: TCheckBox;
56
ScaleOnResizeCheckBox: TCheckBox;
57
ShowHeaderCaptionCheckBox: TCheckBox;
58
ShowHeaderCheckBox: TCheckBox;
59
SplitterWidthLabel: TLabel;
60
SplitterWidthTrackBar: TTrackBar;
61
procedure OkClick(Sender: TObject);
62
procedure DragThresholdTrackBarChange(Sender: TObject);
63
procedure HeaderAlignLeftTrackBarChange(Sender: TObject);
64
procedure HeaderAlignTopTrackBarChange(Sender: TObject);
65
procedure SplitterWidthTrackBarChange(Sender: TObject);
67
FFlags: TAnchorDockOptionsFlags;
68
FMaster: TAnchorDockMaster;
69
FSettings: TAnchorDockSettings;
70
procedure SetFlags(AValue: TAnchorDockOptionsFlags);
71
procedure SetMaster(const AValue: TAnchorDockMaster);
72
procedure SetSettings(AValue: TAnchorDockSettings);
73
procedure UpdateDragThresholdLabel;
74
procedure UpdateHeaderAlignTopLabel;
75
procedure UpdateHeaderAlignLeftLabel;
76
procedure UpdateSplitterWidthLabel;
79
procedure SaveToMaster;
80
procedure LoadFromMaster;
81
procedure SaveToSettings(TheSettings: TAnchorDockSettings);
82
procedure LoadFromSettings(TheSettings: TAnchorDockSettings);
83
property Master: TAnchorDockMaster read FMaster write SetMaster;
84
property Settings: TAnchorDockSettings read FSettings write SetSettings;
85
property Flags: TAnchorDockOptionsFlags read FFlags write SetFlags;
88
function ShowAnchorDockOptions(ADockMaster: TAnchorDockMaster): TModalResult;
92
function ShowAnchorDockOptions(ADockMaster: TAnchorDockMaster): TModalResult;
95
OptsFrame: TAnchorDockOptionsFrame;
96
BtnPanel: TButtonPanel;
98
Dlg:=TForm.Create(nil);
100
Dlg.DisableAutoSizing;
101
Dlg.Position:=poScreenCenter;
103
Dlg.Caption:=adrsGeneralDockingOptions;
105
OptsFrame:=TAnchorDockOptionsFrame.Create(Dlg);
106
OptsFrame.Align:=alClient;
107
OptsFrame.Parent:=Dlg;
108
OptsFrame.Master:=ADockMaster;
110
BtnPanel:=TButtonPanel.Create(Dlg);
111
BtnPanel.ShowButtons:=[pbOK, pbCancel];
112
BtnPanel.OKButton.OnClick:=@OptsFrame.OkClick;
113
BtnPanel.Parent:=Dlg;
114
Dlg.EnableAutoSizing;
115
Result:=Dlg.ShowModal;
123
{ TAnchorDockOptionsFrame }
125
procedure TAnchorDockOptionsFrame.HeaderAlignLeftTrackBarChange(Sender: TObject);
127
UpdateHeaderAlignLeftLabel;
130
procedure TAnchorDockOptionsFrame.HeaderAlignTopTrackBarChange(Sender: TObject);
132
UpdateHeaderAlignTopLabel;
135
procedure TAnchorDockOptionsFrame.SplitterWidthTrackBarChange(Sender: TObject);
137
UpdateSplitterWidthLabel;
140
procedure TAnchorDockOptionsFrame.OkClick(Sender: TObject);
142
if Settings<>nil then
143
SaveToSettings(Settings);
148
procedure TAnchorDockOptionsFrame.DragThresholdTrackBarChange(Sender: TObject);
150
UpdateDragThresholdLabel;
153
procedure TAnchorDockOptionsFrame.SetMaster(const AValue: TAnchorDockMaster);
155
if FMaster=AValue then exit;
161
procedure TAnchorDockOptionsFrame.SetFlags(AValue: TAnchorDockOptionsFlags);
163
if FFlags=AValue then Exit;
168
procedure TAnchorDockOptionsFrame.SetSettings(AValue: TAnchorDockSettings);
170
if FSettings=AValue then Exit;
172
if Settings<>nil then
173
LoadFromSettings(Settings);
176
procedure TAnchorDockOptionsFrame.UpdateDragThresholdLabel;
178
DragThresholdLabel.Caption:=adrsDragThreshold
179
+' ('+IntToStr(DragThresholdTrackBar.Position)+')';
182
procedure TAnchorDockOptionsFrame.UpdateHeaderAlignTopLabel;
184
HeaderAlignTopLabel.Caption:=adrsHeaderAlignTop
185
+' ('+IntToStr(HeaderAlignTopTrackBar.Position)+')';
188
procedure TAnchorDockOptionsFrame.UpdateHeaderAlignLeftLabel;
190
HeaderAlignLeftLabel.Caption:=adrsHeaderAlignLeft
191
+' ('+IntToStr(HeaderAlignLeftTrackBar.Position)+')';
194
procedure TAnchorDockOptionsFrame.UpdateSplitterWidthLabel;
196
SplitterWidthLabel.Caption:=adrsSplitterWidth
197
+' ('+IntToStr(SplitterWidthTrackBar.Position)+')';
200
procedure TAnchorDockOptionsFrame.ApplyFlags;
202
ShowHeaderCheckBox.Visible:=adofShow_ShowHeader in Flags;
205
procedure TAnchorDockOptionsFrame.SaveToMaster;
207
CurSettings: TAnchorDockSettings;
209
CurSettings:=TAnchorDockSettings.Create;
211
SaveToSettings(CurSettings);
212
Master.LoadSettings(CurSettings);
218
procedure TAnchorDockOptionsFrame.LoadFromMaster;
220
CurSettings: TAnchorDockSettings;
222
CurSettings:=TAnchorDockSettings.Create;
224
Master.SaveSettings(CurSettings);
225
LoadFromSettings(CurSettings);
231
procedure TAnchorDockOptionsFrame.SaveToSettings(
232
TheSettings: TAnchorDockSettings);
234
TheSettings.DragTreshold:=DragThresholdTrackBar.Position;
235
TheSettings.HeaderAlignTop:=HeaderAlignTopTrackBar.Position;
236
TheSettings.HeaderAlignLeft:=HeaderAlignLeftTrackBar.Position;
237
TheSettings.SplitterWidth:=SplitterWidthTrackBar.Position;
238
TheSettings.ScaleOnResize:=ScaleOnResizeCheckBox.Checked;
239
TheSettings.ShowHeader:=ShowHeaderCheckBox.Checked;
240
TheSettings.ShowHeaderCaption:=ShowHeaderCaptionCheckBox.Checked;
241
TheSettings.HideHeaderCaptionFloatingControl:=HideHeaderCaptionForFloatingCheckBox.Checked;
244
procedure TAnchorDockOptionsFrame.LoadFromSettings(
245
TheSettings: TAnchorDockSettings);
247
DragThresholdTrackBar.Hint:=
248
adrsAmountOfPixelTheMouseHasToDragBeforeDragStarts;
249
DragThresholdTrackBar.Position:=TheSettings.DragTreshold;
250
UpdateDragThresholdLabel;
252
HeaderAlignTopTrackBar.Hint:=
253
adrsMoveHeaderToTopWhenWidthHeight100HeaderAlignTop;
254
HeaderAlignTopTrackBar.Position:=TheSettings.HeaderAlignTop;
255
UpdateHeaderAlignTopLabel;
257
HeaderAlignLeftTrackBar.Hint:=
258
adrsMoveHeaderToLeftWhenWidthHeight100HeaderAlignLeft;
259
HeaderAlignLeftTrackBar.Position:=TheSettings.HeaderAlignLeft;
260
UpdateHeaderAlignLeftLabel;
262
SplitterWidthTrackBar.Hint:=adrsSplitterThickness;
263
SplitterWidthTrackBar.Position:=TheSettings.SplitterWidth;
264
UpdateSplitterWidthLabel;
266
ScaleOnResizeCheckBox.Caption:=adrsScaleOnResize;
267
ScaleOnResizeCheckBox.Hint:=adrsScaleSubSitesWhenASiteIsResized;
268
ScaleOnResizeCheckBox.Checked:=TheSettings.ScaleOnResize;
270
ShowHeaderCheckBox.Caption:=adrsShowHeaders;
271
ShowHeaderCheckBox.Hint:=
272
adrsEachDockedWindowHasAHeaderThatAllowsDraggingHasACo;
273
ShowHeaderCheckBox.Checked:=TheSettings.ShowHeader;
275
ShowHeaderCaptionCheckBox.Caption:=adrsShowHeaderCaptions;
276
ShowHeaderCaptionCheckBox.Hint:=adrsShowCaptionsOfDockedControlsInTheHeader;
277
ShowHeaderCaptionCheckBox.Checked:=TheSettings.ShowHeaderCaption;
279
HideHeaderCaptionForFloatingCheckBox.Caption:=adrsNoCaptionsForFloatingSites;
280
HideHeaderCaptionForFloatingCheckBox.Hint:=
281
adrsHideHeaderCaptionsForSitesWithOnlyOneDockedControl;
282
HideHeaderCaptionForFloatingCheckBox.Checked:=
283
TheSettings.HideHeaderCaptionFloatingControl;