28
28
Classes, SysUtils, Graphics, Dialogs, StdCtrls,
29
29
Spin, LCLType, SynEdit, SynEditMouseCmds, EditorOptions, LazarusIDEStrConsts,
30
30
IDEOptionsIntf, editor_general_options, editor_color_options, IDEProcs,
31
SynGutterLineNumber, SynGutter;
31
SynGutterLineNumber, SynGutterLineOverview, SynGutter, SourceSynEditor;
34
34
{ TEditorDisplayOptionsFrame }
36
36
TEditorDisplayOptionsFrame = class(TAbstractIDEOptionsEditor)
37
chkTopInfoView: TCheckBox;
38
chkShowOverview: TCheckBox;
37
39
DisableAntialiasingCheckBox: TCheckBox;
38
40
DisplayPreview: TSynEdit;
39
41
EditorFontButton: TButton;
40
42
EditorFontComboBox: TComboBox;
41
43
EditorFontGroupBox: TGroupBox;
42
EditorFontHeightComboBox: TComboBox;
43
EditorFontHeightLabel: TLabel;
44
EditorFontSizeSpinEdit: TSpinEdit;
45
EditorFontSizeLabel: TLabel;
44
46
ExtraCharSpacingComboBox: TComboBox;
45
47
ExtraCharSpacingLabel: TLabel;
46
48
ExtraLineSpacingComboBox: TComboBox;
58
60
VisibleRightMarginCheckBox: TCheckBox;
59
61
procedure EditorFontButtonClick(Sender: TObject);
60
62
procedure EditorFontComboBoxEditingDone(Sender: TObject);
63
procedure EditorFontSizeSpinEditChange(Sender: TObject);
61
64
procedure ComboboxOnExit(Sender: TObject);
62
65
procedure ComboBoxOnKeyDown(Sender: TObject; var Key: Word;
63
66
Shift: TShiftState);
69
72
procedure ShowLineNumbersCheckBoxClick(Sender: TObject);
71
74
FDialog: TAbstractOptionsEditorDialog;
75
FUpdatingFontSizeRange: Boolean;
76
function FontSizeNegativeToPositive(NegativeSize: Integer): Integer;
72
77
function GeneralPage: TEditorGeneralOptionsFrame; inline;
78
procedure SetEditorFontSizeSpinEditValue(FontSize: Integer);
74
80
procedure FontDialogApplyClicked(Sender: TObject);
75
81
function DoSynEditMouse(var AnInfo: TSynEditMouseActionInfo;
98
function TEditorDisplayOptionsFrame.FontSizeNegativeToPositive(NegativeSize: Integer): Integer;
102
DisplayPreview.Canvas.Font.Assign(DisplayPreview.Font);
103
if LCLIntf.GetTextMetrics(DisplayPreview.Canvas.Handle, tm) then
104
Result := -(NegativeSize + MulDiv(tm.tmInternalLeading, 72, DisplayPreview.Font.PixelsPerInch))
106
Result := -NegativeSize;
89
109
procedure TEditorDisplayOptionsFrame.FontDialogApplyClicked(Sender: TObject);
95
115
if PreviewEdits[a] <> nil then
96
116
PreviewEdits[a].Font.Assign(TFontDialog(Sender).Font);
98
SetComboBoxText(EditorFontComboBox, DisplayPreview.Font.Name);
99
SetComboBoxText(EditorFontHeightComboBox, IntToStr(DisplayPreview.Font.Height));
118
SetComboBoxText(EditorFontComboBox, DisplayPreview.Font.Name,cstCaseInsensitive);
119
SetEditorFontSizeSpinEditValue(DisplayPreview.Font.Size);
102
122
function TEditorDisplayOptionsFrame.DoSynEditMouse(var AnInfo: TSynEditMouseActionInfo;
108
128
procedure TEditorDisplayOptionsFrame.EditorFontButtonClick(Sender: TObject);
110
130
FontDialog: TFontDialog;
131
CurFontSize: Integer;
113
133
FontDialog := TFontDialog.Create(nil);
115
135
with FontDialog do
117
137
Font.Name := EditorFontComboBox.Text;
118
NewHeight := StrToIntDef(EditorFontHeightComboBox.Text, DisplayPreview.Font.Height);
119
RepairEditorFontHeight(NewHeight);
120
Font.Height := NewHeight;
138
CurFontSize := EditorFontSizeSpinEdit.Value;
139
if CurFontSize < 0 then
141
CurFontSize := FontSizeNegativeToPositive(CurFontSize);
142
RepairEditorFontSize(CurFontSize);
144
Font.Size := CurFontSize;
121
145
Options := Options + [fdApplyButton];
122
146
OnApplyClicked := @FontDialogApplyClicked;
138
162
PreviewEdits[i].Font.Name := EditorFontComboBox.Text;
165
procedure TEditorDisplayOptionsFrame.EditorFontSizeSpinEditChange(Sender: TObject);
169
NewVal := EditorFontSizeSpinEdit.Value;
170
if (NewVal < 0) and (NewVal > -EditorOptionsMinimumFontSize) then
172
// Skip to minimum positive value. Will trigger OnChange again.
173
SetEditorFontSizeSpinEditValue(EditorOptionsMinimumFontSize);
177
if (NewVal > 0) and not FUpdatingFontSizeRange then
178
EditorFontSizeSpinEdit.MinValue := EditorOptionsMinimumFontSize;
181
for a := Low(PreviewEdits) to High(PreviewEdits) do
182
if PreviewEdits[a] <> nil then
183
PreviewEdits[a].Font.Size := NewVal;
141
187
procedure TEditorDisplayOptionsFrame.ComboboxOnExit(Sender: TObject);
143
189
NewVal, a: Integer;
145
if Sender = EditorFontHeightComboBox then
147
NewVal := StrToIntDef(EditorFontHeightComboBox.Text, DisplayPreview.Font.Height);
148
RepairEditorFontHeight(NewVal);
149
SetComboBoxText(EditorFontHeightComboBox, IntToStr(NewVal));
151
for a := Low(PreviewEdits) to High(PreviewEdits) do
152
if PreviewEdits[a] <> nil then
153
PreviewEdits[a].Font.Height := NewVal;
156
191
if Sender = ExtraCharSpacingComboBox then
158
193
NewVal := StrToIntDef(ExtraCharSpacingComboBox.Text, DisplayPreview.ExtraCharSpacing);
159
SetComboBoxText(ExtraCharSpacingComboBox, IntToStr(NewVal));
194
SetComboBoxText(ExtraCharSpacingComboBox, IntToStr(NewVal),cstCaseInsensitive);
160
195
with GeneralPage do
161
196
for a := Low(PreviewEdits) to High(PreviewEdits) do
162
197
if PreviewEdits[a] <> Nil then
166
201
if Sender = ExtraLineSpacingComboBox then
168
203
NewVal := StrToIntDef(ExtraLineSpacingComboBox.Text, DisplayPreview.ExtraLineSpacing);
169
SetComboBoxText(ExtraLineSpacingComboBox, IntToStr(NewVal));
204
SetComboBoxText(ExtraLineSpacingComboBox, IntToStr(NewVal),cstCaseInsensitive);
170
205
with GeneralPage do
171
206
for a := Low(PreviewEdits) to High(PreviewEdits) do
172
207
if PreviewEdits[a] <> Nil then
176
211
if Sender = RightMarginComboBox then
178
213
NewVal := StrToIntDef(RightMarginComboBox.Text, DisplayPreview.RightEdge);
179
SetComboBoxText(RightMarginComboBox, IntToStr(NewVal));
214
SetComboBoxText(RightMarginComboBox, IntToStr(NewVal),cstCaseInsensitive);
180
215
with GeneralPage do
181
216
for a := Low(PreviewEdits) to High(PreviewEdits) do
182
217
if PreviewEdits[a] <> nil then
219
PreviewEdits[a].RightEdge := NewVal;
184
220
if VisibleRightMarginCheckBox.Checked then
185
PreviewEdits[a].RightEdge := NewVal
221
PreviewEdits[a].Options := PreviewEdits[a].Options - [eoHideRightMargin]
187
PreviewEdits[a].RightEdge := 0;
223
PreviewEdits[a].Options := PreviewEdits[a].Options + [eoHideRightMargin];
220
256
if PreviewEdits[a] <> nil then
222
258
PreviewEdits[a].Gutter.Visible := VisibleGutterCheckBox.Checked;
259
PreviewEdits[a].RightGutter.Visible := chkShowOverview.Checked;
223
260
PreviewEdits[a].Gutter.LineNumberPart.Visible
224
261
:= ShowLineNumbersCheckBox.Checked;
225
262
if Assigned(PreviewEdits[a].Gutter.Parts.ByClass[TSynGutterLineNumber, 0]) then
233
270
if Separator.Visible then
234
271
Separator.Index := GutterSeparatorIndexSpinBox.Value;
273
PreviewEdits[a].RightEdge := StrToIntDef(RightMarginComboBox.Text, 80);
236
274
if VisibleRightMarginCheckBox.Checked then
237
PreviewEdits[a].RightEdge := StrToIntDef(RightMarginComboBox.Text, 80)
275
PreviewEdits[a].Options := PreviewEdits[a].Options - [eoHideRightMargin]
239
PreviewEdits[a].RightEdge := 0;
277
PreviewEdits[a].Options := PreviewEdits[a].Options + [eoHideRightMargin];
240
278
if DisableAntialiasingCheckBox.Checked then
241
279
PreviewEdits[a].Font.Quality := fqNonAntialiased
277
315
Result := TEditorGeneralOptionsFrame(FDialog.FindEditor(TEditorGeneralOptionsFrame));
318
procedure TEditorDisplayOptionsFrame.SetEditorFontSizeSpinEditValue(FontSize: Integer);
320
FUpdatingFontSizeRange := True;
322
EditorFontSizeSpinEdit.MinValue := -EditorFontSizeSpinEdit.MaxValue
324
EditorFontSizeSpinEdit.MinValue := EditorOptionsMinimumFontSize;
325
FUpdatingFontSizeRange := False;
326
EditorFontSizeSpinEdit.Value := FontSize;
280
329
function TEditorDisplayOptionsFrame.GetTitle: String;
282
331
Result := dlgEdDisplay;
287
336
// Prevent the caret from moving
288
337
DisplayPreview.RegisterMouseActionSearchHandler(@DoSynEditMouse);
289
338
FDialog := ADialog;
339
FUpdatingFontSizeRange := False;
291
341
MarginAndGutterGroupBox.Caption := dlgMarginGutter;
292
342
VisibleRightMarginCheckBox.Caption := dlgVisibleRightMargin;
296
346
GutterSeparatorIndexLabel.Caption := dlgGutterSeparatorIndex;
297
347
RightMarginLabel.Caption := dlgRightMargin;
298
348
EditorFontGroupBox.Caption := dlgDefaultEditorFont;
299
EditorFontHeightLabel.Caption := dlgEditorFontHeight;
349
EditorFontSizeLabel.Caption := dlgEditorFontSize;
300
350
ExtraCharSpacingLabel.Caption := dlgExtraCharSpacing;
301
351
ExtraLineSpacingLabel.Caption := dlgExtraLineSpacing;
302
352
DisableAntialiasingCheckBox.Caption := dlgDisableAntialiasing;
303
353
RightMarginColorLink.Caption := dlgColorLink;
354
chkShowOverview.Caption := lisShowOverviewGutter;
355
chkTopInfoView.Caption := lisTopInfoView;
305
357
with GeneralPage do
306
358
AddPreviewEdit(DisplayPreview);
360
with TSynGutterSeparator.Create(DisplayPreview.RightGutter.Parts) do
361
Name := 'DPSynGutterSeparatorR2';
362
with TSynGutterLineOverview.Create(DisplayPreview.RightGutter.Parts) do begin
363
Name := 'DPSynGutterLineOverview1';
364
with TIDESynGutterLOvProviderIDEMarks.Create(Providers) do
366
with TSynGutterLOvProviderModifiedLines.Create(Providers) do
368
with TSynGutterLOvProviderCurrentPage.Create(Providers) do
370
with TIDESynGutterLOvProviderPascal.Create(Providers) do
373
with TSynGutterSeparator.Create(DisplayPreview.RightGutter.Parts) do begin
374
Name := 'DPSynGutterSeparatorR3';
309
382
procedure TEditorDisplayOptionsFrame.ReadSettings(AOptions: TAbstractIDEOptions);
311
384
with AOptions as TEditorOptions do
313
386
// init the spin-edit first, since it does not trigger on change,
314
// but is copied when checkboxes are initalized
387
// but is copied when checkboxes are initialized
315
388
ShowOnlyLineNumbersMultiplesOfSpinEdit.Value := ShowOnlyLineNumbersMultiplesOf;
316
389
GutterSeparatorIndexSpinBox.Value := GutterSeparatorIndex;
317
390
VisibleRightMarginCheckBox.Checked := VisibleRightMargin;
318
391
VisibleGutterCheckBox.Checked := VisibleGutter;
319
392
ShowLineNumbersCheckBox.Checked := ShowLineNumbers;
320
393
VisibleRightMarginCheckBox.Checked := VisibleRightMargin;
321
SetComboBoxText(RightMarginComboBox, IntToStr(RightMargin));
322
SetComboBoxText(EditorFontComboBox, EditorFont);
323
SetComboBoxText(EditorFontHeightComboBox, IntToStr(EditorFontHeight));
324
SetComboBoxText(ExtraCharSpacingComboBox, IntToStr(ExtraCharSpacing));
325
SetComboBoxText(ExtraLineSpacingComboBox, IntToStr(ExtraLineSpacing));
394
SetComboBoxText(RightMarginComboBox, IntToStr(RightMargin),cstCaseInsensitive);
395
SetComboBoxText(EditorFontComboBox, EditorFont,cstCaseInsensitive);
396
SetEditorFontSizeSpinEditValue(EditorFontSize);
397
SetComboBoxText(ExtraCharSpacingComboBox, IntToStr(ExtraCharSpacing),cstCaseInsensitive);
398
SetComboBoxText(ExtraLineSpacingComboBox, IntToStr(ExtraLineSpacing),cstCaseInsensitive);
326
399
DisableAntialiasingCheckBox.Checked := DisableAntialiasing;
400
chkShowOverview.Checked := ShowOverviewGutter;
401
chkTopInfoView.Checked := TopInfoView;
329
404
ShowOnlyLineNumbersMultiplesOfLabel.Enabled := ShowLineNumbersCheckBox.Checked;
342
417
VisibleRightMargin := VisibleRightMarginCheckBox.Checked;
343
418
RightMargin := StrToIntDef(RightMarginComboBox.Text, 80);
344
419
EditorFont := EditorFontComboBox.Text;
345
EditorFontHeight := StrToIntDef(EditorFontHeightComboBox.Text, EditorFontHeight);
420
EditorFontSize := EditorFontSizeSpinEdit.Value;
346
421
ExtraCharSpacing := StrToIntDef(ExtraCharSpacingComboBox.Text, ExtraCharSpacing);
347
422
ExtraLineSpacing := StrToIntDef(ExtraLineSpacingComboBox.Text, ExtraLineSpacing);
348
423
DisableAntialiasing := DisableAntialiasingCheckBox.Checked;
424
ShowOverviewGutter := chkShowOverview.Checked;
425
TopInfoView := chkTopInfoView.Checked;