~ubuntu-branches/ubuntu/saucy/lazarus/saucy

« back to all changes in this revision

Viewing changes to components/anchordocking/anchordockoptionsdlg.pas

  • Committer: Package Import Robot
  • Author(s): Paul Gevers, Abou Al Montacir, Bart Martens, Paul Gevers
  • Date: 2013-06-08 14:12:17 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20130608141217-7k0cy9id8ifcnutc
Tags: 1.0.8+dfsg-1
[ Abou Al Montacir ]
* New upstream major release and multiple maintenace release offering many
  fixes and new features marking a new milestone for the Lazarus development
  and its stability level.
  - The detailed list of changes can be found here:
    http://wiki.lazarus.freepascal.org/Lazarus_1.0_release_notes
    http://wiki.lazarus.freepascal.org/Lazarus_1.0_fixes_branch
* LCL changes:
  - LCL is now a normal package.
      + Platform independent parts of the LCL are now in the package LCLBase
      + LCL is automatically recompiled when switching the target platform,
        unless pre-compiled binaries for this target are already installed.
      + No impact on existing projects.
      + Linker options needed by LCL are no more added to projects that do
        not use the LCL package.
  - Minor changes in LCL basic classes behaviour
      + TCustomForm.Create raises an exception if a form resource is not
        found.
      + TNotebook and TPage: a new implementation of these classes was added.
      + TDBNavigator: It is now possible to have focusable buttons by setting
        Options = [navFocusableButtons] and TabStop = True, useful for
        accessibility and for devices with neither mouse nor touch screen.
      + Names of TControlBorderSpacing.GetSideSpace and GetSpace were swapped
        and are now consistent. GetSideSpace = Around + GetSpace.
      + TForm.WindowState=wsFullscreen was added
      + TCanvas.TextFitInfo was added to calculate how many characters will
        fit into a specified Width. Useful for word-wrapping calculations.
      + TControl.GetColorResolvingParent and
        TControl.GetRGBColorResolvingParent were added, simplifying the work
        to obtain the final color of the control while resolving clDefault
        and the ParentColor.
      + LCLIntf.GetTextExtentExPoint now has a good default implementation
        which works in any platform not providing a specific implementation.
        However, Widgetset specific implementation is better, when available.
      + TTabControl was reorganized. Now it has the correct class hierarchy
        and inherits from TCustomTabControl as it should.
  - New unit in the LCL:
      + lazdialogs.pas: adds non-native versions of various native dialogs,
        for example TLazOpenDialog, TLazSaveDialog, TLazSelectDirectoryDialog.
        It is used by widgetsets which either do not have a native dialog, or
        do not wish to use it because it is limited. These dialogs can also be
        used by user applications directly.
      + lazdeviceapis.pas: offers an interface to more hardware devices such
        as the accelerometer, GPS, etc. See LazDeviceAPIs
      + lazcanvas.pas: provides a TFPImageCanvas descendent implementing
        drawing in a LCL-compatible way, but 100% in Pascal.
      + lazregions.pas. LazRegions is a wholly Pascal implementation of
        regions for canvas clipping, event clipping, finding in which control
        of a region tree one an event should reach, for drawing polygons, etc.
      + customdrawncontrols.pas, customdrawndrawers.pas,
        customdrawn_common.pas, customdrawn_android.pas and
        customdrawn_winxp.pas: are the Lazarus Custom Drawn Controls -controls
        which imitate the standard LCL ones, but with the difference that they
        are non-native and support skinning.
  - New APIs added to the LCL to improve support of accessibility software
    such as screen readers.
* IDE changes:
  - Many improvments.
  - The detailed list of changes can be found here:
    http://wiki.lazarus.freepascal.org/New_IDE_features_since#v1.0_.282012-08-29.29
    http://wiki.lazarus.freepascal.org/Lazarus_1.0_release_notes#IDE_Changes
* Debugger / Editor changes:
  - Added pascal sources and breakpoints to the disassembler
  - Added threads dialog.
* Components changes:
  - TAChart: many fixes and new features
  - CodeTool: support Delphi style generics and new syntax extensions.
  - AggPas: removed to honor free licencing. (Closes: Bug#708695)
[Bart Martens]
* New debian/watch file fixing issues with upstream RC release.
[Abou Al Montacir]
* Avoid changing files in .pc hidden directory, these are used by quilt for
  internal purpose and could lead to surprises during build.
[Paul Gevers]
* Updated get-orig-source target and it compinion script orig-tar.sh so that they
  repack the source file, allowing bug 708695 to be fixed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
{ Unit implementing anchor docking.
 
2
 
 
3
  Copyright (C) 2010 Mattias Gaertner mattias@freepascal.org
 
4
 
 
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:
 
9
 
 
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.
 
20
 
 
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
 
24
  for more details.
 
25
 
 
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.
 
29
}
 
30
unit AnchorDockOptionsDlg;
 
31
 
 
32
{$mode objfpc}{$H+}
 
33
 
 
34
interface
 
35
 
 
36
uses
 
37
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
 
38
  StdCtrls, ComCtrls, LCLProc, AnchorDocking, AnchorDockStr;
 
39
 
 
40
type
 
41
  TAnchorDockOptionsFlag = (
 
42
    adofShow_ShowHeader
 
43
    );
 
44
  TAnchorDockOptionsFlags = set of TAnchorDockOptionsFlag;
 
45
 
 
46
  { TAnchorDockOptionsFrame }
 
47
 
 
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);
 
66
  private
 
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;
 
77
    procedure ApplyFlags;
 
78
  public
 
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;
 
86
  end;
 
87
 
 
88
function ShowAnchorDockOptions(ADockMaster: TAnchorDockMaster): TModalResult;
 
89
 
 
90
implementation
 
91
 
 
92
function ShowAnchorDockOptions(ADockMaster: TAnchorDockMaster): TModalResult;
 
93
var
 
94
  Dlg: TForm;
 
95
  OptsFrame: TAnchorDockOptionsFrame;
 
96
  BtnPanel: TButtonPanel;
 
97
begin
 
98
  Dlg:=TForm.Create(nil);
 
99
  try
 
100
    Dlg.DisableAutoSizing;
 
101
    Dlg.Position:=poScreenCenter;
 
102
    Dlg.AutoSize:=true;
 
103
    Dlg.Caption:=adrsGeneralDockingOptions;
 
104
 
 
105
    OptsFrame:=TAnchorDockOptionsFrame.Create(Dlg);
 
106
    OptsFrame.Align:=alClient;
 
107
    OptsFrame.Parent:=Dlg;
 
108
    OptsFrame.Master:=ADockMaster;
 
109
 
 
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;
 
116
  finally
 
117
    Dlg.Free;
 
118
  end;
 
119
end;
 
120
 
 
121
{$R *.lfm}
 
122
 
 
123
{ TAnchorDockOptionsFrame }
 
124
 
 
125
procedure TAnchorDockOptionsFrame.HeaderAlignLeftTrackBarChange(Sender: TObject);
 
126
begin
 
127
  UpdateHeaderAlignLeftLabel;
 
128
end;
 
129
 
 
130
procedure TAnchorDockOptionsFrame.HeaderAlignTopTrackBarChange(Sender: TObject);
 
131
begin
 
132
  UpdateHeaderAlignTopLabel;
 
133
end;
 
134
 
 
135
procedure TAnchorDockOptionsFrame.SplitterWidthTrackBarChange(Sender: TObject);
 
136
begin
 
137
  UpdateSplitterWidthLabel;
 
138
end;
 
139
 
 
140
procedure TAnchorDockOptionsFrame.OkClick(Sender: TObject);
 
141
begin
 
142
  if Settings<>nil then
 
143
    SaveToSettings(Settings);
 
144
  if Master<>nil then
 
145
    SaveToMaster;
 
146
end;
 
147
 
 
148
procedure TAnchorDockOptionsFrame.DragThresholdTrackBarChange(Sender: TObject);
 
149
begin
 
150
  UpdateDragThresholdLabel;
 
151
end;
 
152
 
 
153
procedure TAnchorDockOptionsFrame.SetMaster(const AValue: TAnchorDockMaster);
 
154
begin
 
155
  if FMaster=AValue then exit;
 
156
  FMaster:=AValue;
 
157
  if Master<>nil then
 
158
    LoadFromMaster;
 
159
end;
 
160
 
 
161
procedure TAnchorDockOptionsFrame.SetFlags(AValue: TAnchorDockOptionsFlags);
 
162
begin
 
163
  if FFlags=AValue then Exit;
 
164
  FFlags:=AValue;
 
165
  ApplyFlags;
 
166
end;
 
167
 
 
168
procedure TAnchorDockOptionsFrame.SetSettings(AValue: TAnchorDockSettings);
 
169
begin
 
170
  if FSettings=AValue then Exit;
 
171
  FSettings:=AValue;
 
172
  if Settings<>nil then
 
173
    LoadFromSettings(Settings);
 
174
end;
 
175
 
 
176
procedure TAnchorDockOptionsFrame.UpdateDragThresholdLabel;
 
177
begin
 
178
  DragThresholdLabel.Caption:=adrsDragThreshold
 
179
                             +' ('+IntToStr(DragThresholdTrackBar.Position)+')';
 
180
end;
 
181
 
 
182
procedure TAnchorDockOptionsFrame.UpdateHeaderAlignTopLabel;
 
183
begin
 
184
  HeaderAlignTopLabel.Caption:=adrsHeaderAlignTop
 
185
                            +' ('+IntToStr(HeaderAlignTopTrackBar.Position)+')';
 
186
end;
 
187
 
 
188
procedure TAnchorDockOptionsFrame.UpdateHeaderAlignLeftLabel;
 
189
begin
 
190
  HeaderAlignLeftLabel.Caption:=adrsHeaderAlignLeft
 
191
                           +' ('+IntToStr(HeaderAlignLeftTrackBar.Position)+')';
 
192
end;
 
193
 
 
194
procedure TAnchorDockOptionsFrame.UpdateSplitterWidthLabel;
 
195
begin
 
196
  SplitterWidthLabel.Caption:=adrsSplitterWidth
 
197
                             +' ('+IntToStr(SplitterWidthTrackBar.Position)+')';
 
198
end;
 
199
 
 
200
procedure TAnchorDockOptionsFrame.ApplyFlags;
 
201
begin
 
202
  ShowHeaderCheckBox.Visible:=adofShow_ShowHeader in Flags;
 
203
end;
 
204
 
 
205
procedure TAnchorDockOptionsFrame.SaveToMaster;
 
206
var
 
207
  CurSettings: TAnchorDockSettings;
 
208
begin
 
209
  CurSettings:=TAnchorDockSettings.Create;
 
210
  try
 
211
    SaveToSettings(CurSettings);
 
212
    Master.LoadSettings(CurSettings);
 
213
  finally
 
214
    CurSettings.Free;
 
215
  end;
 
216
end;
 
217
 
 
218
procedure TAnchorDockOptionsFrame.LoadFromMaster;
 
219
var
 
220
  CurSettings: TAnchorDockSettings;
 
221
begin
 
222
  CurSettings:=TAnchorDockSettings.Create;
 
223
  try
 
224
    Master.SaveSettings(CurSettings);
 
225
    LoadFromSettings(CurSettings);
 
226
  finally
 
227
    CurSettings.Free;
 
228
  end;
 
229
end;
 
230
 
 
231
procedure TAnchorDockOptionsFrame.SaveToSettings(
 
232
  TheSettings: TAnchorDockSettings);
 
233
begin
 
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;
 
242
end;
 
243
 
 
244
procedure TAnchorDockOptionsFrame.LoadFromSettings(
 
245
  TheSettings: TAnchorDockSettings);
 
246
begin
 
247
  DragThresholdTrackBar.Hint:=
 
248
    adrsAmountOfPixelTheMouseHasToDragBeforeDragStarts;
 
249
  DragThresholdTrackBar.Position:=TheSettings.DragTreshold;
 
250
  UpdateDragThresholdLabel;
 
251
 
 
252
  HeaderAlignTopTrackBar.Hint:=
 
253
    adrsMoveHeaderToTopWhenWidthHeight100HeaderAlignTop;
 
254
  HeaderAlignTopTrackBar.Position:=TheSettings.HeaderAlignTop;
 
255
  UpdateHeaderAlignTopLabel;
 
256
 
 
257
  HeaderAlignLeftTrackBar.Hint:=
 
258
    adrsMoveHeaderToLeftWhenWidthHeight100HeaderAlignLeft;
 
259
  HeaderAlignLeftTrackBar.Position:=TheSettings.HeaderAlignLeft;
 
260
  UpdateHeaderAlignLeftLabel;
 
261
 
 
262
  SplitterWidthTrackBar.Hint:=adrsSplitterThickness;
 
263
  SplitterWidthTrackBar.Position:=TheSettings.SplitterWidth;
 
264
  UpdateSplitterWidthLabel;
 
265
 
 
266
  ScaleOnResizeCheckBox.Caption:=adrsScaleOnResize;
 
267
  ScaleOnResizeCheckBox.Hint:=adrsScaleSubSitesWhenASiteIsResized;
 
268
  ScaleOnResizeCheckBox.Checked:=TheSettings.ScaleOnResize;
 
269
 
 
270
  ShowHeaderCheckBox.Caption:=adrsShowHeaders;
 
271
  ShowHeaderCheckBox.Hint:=
 
272
    adrsEachDockedWindowHasAHeaderThatAllowsDraggingHasACo;
 
273
  ShowHeaderCheckBox.Checked:=TheSettings.ShowHeader;
 
274
 
 
275
  ShowHeaderCaptionCheckBox.Caption:=adrsShowHeaderCaptions;
 
276
  ShowHeaderCaptionCheckBox.Hint:=adrsShowCaptionsOfDockedControlsInTheHeader;
 
277
  ShowHeaderCaptionCheckBox.Checked:=TheSettings.ShowHeaderCaption;
 
278
 
 
279
  HideHeaderCaptionForFloatingCheckBox.Caption:=adrsNoCaptionsForFloatingSites;
 
280
  HideHeaderCaptionForFloatingCheckBox.Hint:=
 
281
    adrsHideHeaderCaptionsForSitesWithOnlyOneDockedControl;
 
282
  HideHeaderCaptionForFloatingCheckBox.Checked:=
 
283
    TheSettings.HideHeaderCaptionFloatingControl;
 
284
end;
 
285
 
 
286
end.
 
287